在我MVC3 WEP的應用程序,我已經擴展了授權屬性類似下面如何修改授權屬性,以允許一組用戶角色的MVC 3
public class MyAuthorizeAttribute : AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
if (Authenticate.IsAuthenticated() && httpContext.User.Identity.IsAuthenticated)
{
var authCookie = httpContext.Request.Cookies[FormsAuthentication.FormsCookieName];
if (authCookie != null)
{
var ticket = FormsAuthentication.Decrypt(authCookie.Value);
var roles = ticket.UserData.Split('|');
var identity = new GenericIdentity(ticket.Name);
httpContext.User = new GenericPrincipal(identity, roles);
}
}
return base.AuthorizeCore(httpContext);
}
public override void OnAuthorization(AuthorizationContext filterContext)
{
if (!Authenticate.IsAuthenticated())
HandleUnauthorizedRequest(filterContext);
base.OnAuthorization(filterContext);
}
在我的動作,我用它像
[MyAuthorize(Roles = "Member,Inspector,SalesRep,Admin,SuperAdmin")]
public ActionResult OrderUpload()
現在,我必須在每個操作中指定每個用戶角色。我想這樣做是 指定類似下面
[MyAuthorize(Roles = "Member")]
public ActionResult OrderUpload()
,這應該允許任何用戶角色是等於或高於「會員」。因此應該允許「SalesRep」,不允許「Member」下的「Visitor」。
所有用戶角色都用枚舉越來越多
public enum UserAccountType
{
Visitor = 5,
Member = 10,
Inspector = 15,
SalesRep = 20,
Admin = 25,
SuperAdmin = 30
}
如何修改MyAuthorizeAttribute,使這項工作?
感謝
現在我怎麼會串[作用]轉化爲我的枚舉? 通過與我所有的枚舉角色進行字符串比較? –
是的。我有我的角色在一個表上,並有收集,所以我會做一個EF類型的SQL。但是,如果您使用枚舉,那麼是從枚舉中查找該字符串。 – gdubs
我試過上面的,它開始在我沒有指定任何角色的地方拋出錯誤。例如。 [MyAuthorize] 所以我用你的想法,並提出了我的。我給你指出了這個想法。只要它適合你,請參閱 –