用于多个角色的.NET MVC 5授权属性检查用户

时间:2017-07-24 18:36:30

标签: c# asp.net asp.net-mvc asp.net-mvc-4 identity

我添加了一个自定义授权属性,如下所示:

  public class RequireSubscription: System.Web.Mvc.AuthorizeAttribute
    {
        public override void OnAuthorization(AuthorizationContext filterContext)
        {
            base.OnAuthorization(filterContext);
            if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
            {
                filterContext.Result = new RedirectResult("~/User/Login");
                return;
            }
            if (!filterContext.HttpContext.User.IsInRole("Subscriber"))
            {
                filterContext.Result = new RedirectResult("~/Subscriptions/Subscribe");
                return;
            }
        }
    }

所以逻辑简单明了,如果用户没有特定角色,那么他会被重定向到订阅......

但是,用户可以在登录时添加多个角色,如下所示:

ClaimsIdentity identity = new ClaimsIdentity(DefaultAuthenticationTypes.ApplicationCookie);
identity.AddClaim(new Claim(ClaimTypes.NameIdentifier, model.Email));

List<Claim> claims = new List<Claim>();
var roles = user.UserRoles.Where(x=>x.Active==true).ToList();

foreach (var item in roles)
{
    claims.Add(new Claim(ClaimTypes.Role, item.Roles.RoleName));
}

identity.AddClaims(claims);
identity.AddClaim(new Claim(ClaimTypes.Name, model.Email));

AuthenticationManager.SignIn(new AuthenticationProperties { IsPersistent = true, ExpiresUtc = DateTimeOffset.UtcNow.AddHours(3) }, identity);

我现在需要在授权属性中检查多个角色....

应该更改逻辑以允许用户在他们的整个列表中具有“订阅者”角色时访问控制器,如下所示:

Regular
Subscriber
TestRole

如果其中任何一个等于= Subscriber,则应允许他访问。但是现在情况并非如此,因为我正在猜测我的方法,我只检查设置的第一个角色,而不是其他角色?

如何解决此问题以检查登录时分配的所有用户角色?

0 个答案:

没有答案