在我的应用程序中,角色具有多个权限。我希望用户可以访问取决于权限而不是角色的操作。
因此,假设:
管理员拥有perm1,perm2,perm3,
SuperAdmin具有admin具有+ perm4和perm5的所有权限。
另外,有些未成年人也有perm1,perm3,perm6,perm7。
我要执行以下操作:我希望假定perm3或perm4的人可以访问操作。这两个权限来自两个不同的角色。但是除了perm3 Admin具有perm1和perm2之外,拥有perm3的未成年人也可以执行此操作(不必强制成为admin或superadmin)。
所以你明白我的意思吧?我想在ASP.NET MVC 4中实现这一点。因此,我想我需要创建自己的AuthorizeAttribute
,我自己的IIdentity
并在global.asax中编写一些方法。 ASP.NET中也有一个会员资格,我需要联系吗?我不知道如何将所有事物整合在一起。谁能帮我吗?
最佳答案
public class PermissionAttribute : AuthorizeAttribute
{
private readonly IAccountService _accountService;
private readonly IEnumerable<PermissionEnum> _permissions;
public PermissionAttribute(params PermissionEnum[] permissions):
this(DependencyResolver.Current.GetService<IAccountService>())
{
_permissions = permissions;
}
protected PermissionAttribute(IAccountService accountService)
{
_accountService = accountService;
}
public override void OnAuthorization(AuthorizationContext filterContext)
{
if(!_permissions.Any(x=>_accountService.HasPermission(filterContext.HttpContext.User.Identity.Name,(int)x)))
filterContext.Result = new HttpStatusCodeResult(HttpStatusCode.Forbidden);
base.OnAuthorization(filterContext);
}
}