asp.net-mvc – MVC4 Bootstrap示例中基于角色的导航显示
您如何根据Bootstrap示例项目中的角色有条件地显示菜单项?我正在考虑做以下事情
>实现INavigatonRouteFilter – 实际上只是实现了shouldRemove(Route navigationRoutes)方法 – 通过获取路由的默认控制器/操作并查看用户是否被授权 我用这种方法看到了两个问题: >我实际上并不知道如何执行第一步,除非我添加了一堆条件语句来明确检查Controller的名称 我不知道我已经清楚地解释了这个问题,但基本上我想使用Bootstrap示例中提供的内容来实现基于授权的导航菜单显示(如果可能的话).使用INavigationRouteFilter似乎是最自然的方式. 解决方法
对于那些寻找答案或至少快速修复的人.
这是我在5分钟后得出的结果,而且我肯定没有关于这可能产生的任何副作用. routes.MapNavigationRoute<HomeController>("Index",c => c.Index()) .FilterRoute(() => !WebSecurity.IsAuthenticated); 您可以在调用FilterRoute()时进行所有过滤,也可以添加更多扩展方法来保存一些字符. 我在考虑.RequireRole(“Adiministrators”);它依次调用WebSecurity.RequireRoles()(或HttpContext.Current.User.IsInRole())等. public static NavigationRouteBuilder FilterRoute(this NavigationRouteBuilder builder,Func<bool> func) { var currentRoute = builder._parent; NavigationRoutes.Filters.Add(new BootstrapAuthorizationFilter(builder,x => { if (x == currentRoute) return func(); else return false; })); return builder; } 和BootstrapAuthorizationFilter只是一个实现INavigationRouteFilter的类,它在ShouldRemove()方法中调用func() public class BootstrapAuthorizationFilter : INavigationRouteFilter { private NavigationRouteBuilder builder; private Func<NamedRoute,bool> func; public BootstrapAuthorizationFilter(NavigationRouteBuilder builder,Func<NamedRoute,bool> func) { this.builder = builder; this.func = func; } public bool ShouldRemove(Route navigationRoutes) { if (navigationRoutes is NamedRoute) return func(navigationRoutes as NamedRoute); return false; } } 显然没什么特别的,我不确定我是否会在生产中使用它.但我觉得很简单并且有效(对于我测试过的情况).话虽如此,我希望新的路由功能即将发布:) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc-3 – 全球化在ASP.Net MVC 3
- 处理vbscript中的时区
- asp.net – 如何从SQL数据库流.flv文件
- 如何实现ASP.NET 2.0,Coldfusion 5和Classic ASP之间互操作
- asp.net-mvc – ASP.NET MVC 4在调试模式下捆绑js文件
- asp.net-identity – 多租户身份服务器openid身份验证
- asp.net-web-api – 在Webapi中使用Url.Link与属性路由2
- asp.net – 过程或函数“”需要参数“”,这是未提供的
- asp.net – User.Identity.Name是否为空?
- asp.net – 清除AjaxToolkit AsyncFileUpload控件