我目前正在我的 MVC 应用程序中对过滤器中的授权角色进行硬编码,如下所示:
[Authorize(Roles = "Administrator,Manager")]
我希望最终有一种方法可以将角色映射到每个 Controller ,以便站点管理员可以处理分配可以执行每组操作的角色。
string roles = DoSomethingToGetAllowableRoles(controllerName);
[Authorize(Roles = roles)]
我想象我需要一个数据库表,以某种方式保存每个 Controller 的列表,然后另一个表将 Controller 映射到角色。我想要的是一个页面,我可以在其中列出每个 Controller ,然后有一组复选框,列出适用于该 Controller 的每个角色。
任何人都有一个例子或可以引导我朝着可以实现这一目标的方向发展?
最佳答案
您将需要编写自己的授权过滤器(可能通过扩展内置过滤器)。
这样做的原因是您不能像那样动态分配属性参数。
您不需要弄乱 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
}
}
关于asp.net-mvc - 将角色动态映射到 ASP.Net MVC 中的 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3765885/