动态映射角色到ASP.Net MVC中的控制器

Ben*_*Ben 5 asp.net-mvc authorization controller roles

我目前在我的MVC应用程序中对过滤器中的授权角色进行硬编码,如下所示:

[Authorize(Roles = "Administrator,Manager")]
Run Code Online (Sandbox Code Playgroud)

我想最终有办法将角色映射到每个控制器,以便站点管理员可以处理分配哪些角色可以执行每组操作.

string roles = DoSomethingToGetAllowableRoles(controllerName);

[Authorize(Roles = roles)]
Run Code Online (Sandbox Code Playgroud)

我想我需要有一个数据库表,以某种方式保存每个控制器的列表,然后另一个表将控制器映射到角色.我想要的是一个页面,我可以列出每个控制器,然后有一组复选框,列出适用于该控制器的每个角色.

任何人都有一个例子,或者可以引导我朝着完成这个目标的方向前进?

Ben*_*thy 8

您将需要编写自己的授权过滤器(可能通过扩展内置的过滤器).

原因是您无法像这样动态分配属性参数.

您不需要搞乱MVC源代码 - 您只需要创建一个继承自System.Web.Mvc.AuthrorizeAttribute的类,覆盖AuthorizeCore,然后使用您的属性代替默认值:

public class CustomAuthorizeAttribute : System.Web.Mvc.AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        // Put your custom logic here, returning true for success and false for failure,
        // or return base.AuthorizeCore(httpContext) to defer to the base implementation
    }
}
Run Code Online (Sandbox Code Playgroud)