在我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] 所以我用你的想法,并提出了我的。我给你指出了这个想法。只要它适合你,请参阅 –