文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>ASP.NET MVC SiteMap provider的一个bug

ASP.NET MVC SiteMap provider的一个bug

时间:2010-11-03  来源:神八

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

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

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即可。

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载