public class ApplicationUser : IdentityUser { public string[] Roles { get; set; } }
public class RestrictByRoleAttribute : ActionFilterAttribute { private readonly string[] _roles;
public RestrictByRoleAttribute(params string[] roles)
{
this._roles = roles;
}
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var user = filterContext.HttpContext.GetUser();
if (user != null && user.Roles.Intersect(this._roles).Any())
{
base.OnActionExecuting(filterContext);
}
else
{
filterContext.Result = new HttpUnauthorizedResult();
}
}
}
[HttpPost] [RestrictByRole("Admin")] public ActionResult Edit(UserViewModel user) { ... }
上面的代码将限制只有在用户具有“Admin”角色时,才能编辑用户视图模型。
从用户模型获取用户角色并与RestrictByRoleAttribute一起使用,可以轻松地实现根据用户角色限制可编辑字段的功能。