在我的应用程序中,角色具有多个权限。我希望用户可以访问取决于权限而不是角色的操作。

因此,假设:


管理员拥有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);
        }

    }

07-28 04:48