关于 asp.net mvc 4:Dynamic Roles/Hierarchy with SimpleMembership

Dynamic Roles/Hierarchy with SimpleMembership

我终于用 SimpleMembership 设置了我的 MVC 4 应用程序,但现在遇到了一个新问题。我有一个菜单系统(在侧边栏中),让用户可以访问整个应用程序的各种功能。我最近意识到,为了有点用户友好,我需要根据角色禁用或删除各种菜单链接。所以我建立了一个角色系统和与这些菜单链接的关系,效果很好。但是,"基本站点访问"角色不应有权访问菜单中的所有链接(及其相应的控制器/操作)。以前,我通过简单地通过我的过滤器配置全局应用 Authorize 属性来授予站点访问权限:

1
2
3
4
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
    filters.Add(new AuthorizeAttribute());
}

现在我发现,为了控制对应用程序的"基本"访问,我需要在操作级别添加单独的 Authorize 属性(使用"管理员"角色完全访问)。虽然这很好,虽然有点烦人,但它似乎不是很有可扩展性。如果我的客户通过管理界面添加了一个新角色并想要控制对各种任务的访问怎么办?我已经对菜单系统进行了编码,以根据哪些角色可以访问哪些任务来动态禁用链接。但是没有办法(据我所知)动态地将不同的角色应用于 Authorize 属性。

虽然我已经阅读了为什么 SimpleMembership 可能不是蜜蜂的膝盖,但我刚刚完成了从 ASP.NET Membership 的迁移(它本身有严重的缺点),我当然不想要推出我自己的用户/角色管理系统。有没有人成功地实现了一些东西来处理这种情况?


如果您有很多不想用注释装饰的控制器/操作,那么您绝对应该看看 Fluent Security。

它允许从 Global.asax 处理所有授权。它有据可查,这里有一个很好的教程。