我已经静态地允许使用带有角色的标准Authorize属性来访问控制器/操作方法。我正在使用默认的ASP.Net成员资格提供程序。
我们的一位客户希望获得更精细的访问控制。他们希望能够动态分配哪些角色可以访问哪些控制器/操作等。我已经看到答案说实现CustomAuthorize属性。
只是想知道是否有任何工具包等。这似乎是一个合理的标准功能。我想像这样http://kbochevski.blogspot.com/2009/11/mvc-custom-authorization.html
答案 0 :(得分:6)
尝试这样的自定义属性:
public class DynamicAuthorizeAttribute : AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
var controllerName = httpContext.Request.RequestContext.RouteData.Values["controller"];
var actionName = httpContext.Request.RequestContext.RouteData.Values["action"];
// Get this string (roles) from a database or somewhere dynamic using the controllerName and actionName
Roles = "Role1,Role2,Role3"; // i.e. GetRolesFromDatabase(controllerName, actionName);
return base.AuthorizeCore(httpContext);
}
}
只需将此属性放在需要授权的任何操作方法上,并使用控制器名称和操作名称在数据库中查找以获取所需的角色。
希望这有帮助,
标记