为了使用角色策略来限制访问,您可以使用以下方法定义一个名为“AuthorizeRolesAttribute”的自定义特性,该特性继承了内置的“AuthorizeAttribute”特性,并允许传递一个角色列表作为参数。当用户角色包含在列表中时,才能访问受保护的操作。
自定义AuthorizeRolesAttribute代码示例:
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true)]
public class AuthorizeRolesAttribute : AuthorizeAttribute
{
private readonly string[] _roles;
public AuthorizeRolesAttribute(params string[] roles)
{
_roles = roles;
}
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
var isAuthorized = base.AuthorizeCore(httpContext);
if (!isAuthorized)
{
return false;
}
var userRoles = httpContext.User.Roles();
return _roles.Any(role => userRoles.Contains(role));
}
}
在您的控制器或操作顶部使用AuthorizeRolesAttribute特性,然后在方括号中传递角色列表
[AuthorizeRoles("Admin", "Manager")]
public ActionResult Index()
{
return View();
}