ASP.NET MVC SiteMap provider的一个bug

前几天简单研究了一下mvc中的sitemap provider(点击查看),今天应用到了实际的项目中,碰到了些小麻烦。配置的导航菜单没有显示出来,经过查看源码,折腾了一个多小时后,发现是框架中的一个小小的失误。

框架默认提供的DefaultAclModule类,是用于控制用户能否访问配置的菜单,通过是否能访问来设置是否显示在页面中,即最终是否生成内容。经过调试发现,DefaultAclModule中还包含了一个AuthorizeAttributeAclModule类,是这个module真正执行了判断用户是否有权限访问菜单的逻辑。然而这个逻辑执行得有些早,比如在用户没有登录之前就执行了,通常是首次请求初始化sitemap的时候执行,而这时用户尚未登录,因此不生成任何菜单项。而之后的请求都是从缓存中读取,那么即使登录之后,还是不能显示菜单,因为在初始化时没有生成。对于这个逻辑,估计有作者自身的考虑,但对于实际项目来说,确实不符合逻辑。

不过,作者也提供了扩展的该功能的地方,在配置文件中可设置自定义的aclModule。个人认为对于sitemap没必要牵涉到权限中去,权限控制由Authorize Filter处理即可。因此为了项目能正常跑出来,我自定义了一个空的aclModule,仅简单地返回true,定义以及配置如下:

ExpandedBlockStart.gif EmptyAclModule
     public   class  EmptyAclModule : IAclModule
    {
        
#region  IAclModule 成员

        
public   bool  IsAccessibleToUser(IControllerTypeResolver controllerTypeResolver, MvcSiteMapProvider.DefaultSiteMapProvider provider, HttpContext context, SiteMapNode node)
        {
            
return   true ;
        }

        
#endregion
    }

 

然后将siteMap中的aclModule设置为EmptyAclModule即可。

转载于:https://www.cnblogs.com/shenba/archive/2010/11/03/1868557.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值