gpt4 book ai didi

asp.net-mvc - MVC4 Bootstrap 示例中基于角色的导航显示

转载 作者:行者123 更新时间:2023-12-02 02:17:53 24 4
gpt4 key购买 nike

如何根据 Bootstrap 示例项目中的角色有条件地显示菜单项?我正在考虑执行以下操作

  1. 实现 INavigatonRouteFilter - 实际上只是实现 shouldRemove(Route navigationRoutes) 方法 - 通过获取路线的默认 Controller /操作并查看用户是否获得授权<
  2. App_Start 中配置 NavigationRoutes 后调用 NavigationRoutes.Filters.Add(myAuthorizationFilter)

我发现这种方法有两个问题:

  1. 我实际上不知道如何执行第一步,除非我添加一堆条件语句来显式检查 Controller 的名称
  2. 一旦存在大量过滤器或以后需要更多模块化性,这似乎会使 NavigationRoutes.Filters 变得非常难以处理

我不知道我是否已经足够清楚地解释了问题,但基本上我想使用 Bootstrap 示例中提供的内容来实现基于授权的导航菜单显示(如果可能的话)。使用 INavigationRouteFilter 似乎是最自然的方法。

最佳答案

对于那些寻求答案或至少是快速修复的人。这是我 5 分钟后得出的结论,我肯定没有考虑过这可能产生的任何副作用。

routes.MapNavigationRoute<HomeController>("Index", c => c.Index())
.FilterRoute(() => !WebSecurity.IsAuthenticated);

您可以在对 FilterRoute() 的调用中完成所有过滤,也可以添加更多扩展方法来节省一些字符。

我正在考虑 .RequireRole("Administrators");依次调用 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 - MVC4 Bootstrap 示例中基于角色的导航显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16877663/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com