我添加了一个自定义授权属性,如下所示:
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,则应允许他访问。但是现在情况并非如此,因为我正在猜测我的方法,我只检查设置的第一个角色,而不是其他角色?
如何解决此问题以检查登录时分配的所有用户角色?