我正在使用ASP.NET MVC 3开发一个项目,现在使用MembershipProvider,RoleProvider AuthorizeAttribute和custom。所以在代码的某些部分使用:
[Logon(Roles = "login, test1")]
此代码非常有效,可用于MembershipProvider代码:
public override string [] GetRolesForUser (string username)
{
var = UsuarioRepository.GetListaPermissoesByUsuarioEmail permissions (username);
if (permissions == null)
{
nullPermissao var = new string [0];
nullPermissao return;
}
return permissions;
}
我的问题是。我该如何使用以下代码,哪种方法需要自定义? 我想检查确定是否有特定类型的用户登录并且是否具有某些特权。
[Logon(Roles = "login, test1," Users = "User1")]
使用覆盖字符串[] GetRolesForUser(字符串用户名)方法检查角色,用哪种方法我可以检查用户?
答案 0 :(得分:1)
这应该与AuthorizeAttribute开箱即用。它检查HttpContext.User.Identity.Name是否与您在AuthorizeAttribute.Users下定义的任何术语匹配
正如我从评论中看到的那样,你推出了自己的LogonAttribute,你可能已经覆盖了OnAuthorize方法。这就是AuthorizeAtrribute的神奇之处。
原始ASP.NET MVC源
protected virtual bool AuthorizeCore(HttpContextBase httpContext)
{
if (httpContext == null)
throw new ArgumentNullException("httpContext");
IPrincipal user = httpContext.User;
return user.Identity.IsAuthenticated && (this._usersSplit.Length <= 0 || Enumerable.Contains<string>((IEnumerable<string>) this._usersSplit, user.Identity.Name, (IEqualityComparer<string>) StringComparer.OrdinalIgnoreCase)) && (this._rolesSplit.Length <= 0 || Enumerable.Any<string>((IEnumerable<string>) this._rolesSplit, new Func<string, bool>(user.IsInRole)));
}
public virtual void OnAuthorization(AuthorizationContext filterContext)
{
if (filterContext == null)
throw new ArgumentNullException("filterContext");
if (OutputCacheAttribute.IsChildActionCacheActive((ControllerContext) filterContext))
throw new InvalidOperationException(MvcResources.AuthorizeAttribute_CannotUseWithinChildActionCache);
if (this.AuthorizeCore(filterContext.HttpContext))
{
HttpCachePolicyBase cache = filterContext.HttpContext.Response.Cache;
cache.SetProxyMaxAge(new TimeSpan(0L));
cache.AddValidationCallback(new HttpCacheValidateHandler(this.CacheValidateHandler), (object) null);
}
else
this.HandleUnauthorizedRequest(filterContext);
}
答案 1 :(得分:0)
您的意思是使用以下内容吗?
[Authorize(Roles = "login, test1", Users = "User1")]