簡體   English   中英

任何角色的授權屬性

[英]Authorize attribute for any roles

假設我有WebApi控制器

[Authorize]
public class SomeApiController : ApiController

控制器操作方法本身沒有任何[Authorize][AllowAnonymous]屬性。

我希望Authorize屬性在用戶沒有角色的情況下返回401(未經授權)錯誤-似乎合乎邏輯(如果用戶具有角色並且現在沒有ANY-即使已通過身份驗證,也不應允許他執行操作)。 我查看了asp.net mvc webstack,在Authorize屬性中找到了以下代碼:

if (_rolesSplit.Length > 0 && !_rolesSplit.Any(user.IsInRole))
{
    return false;
}

因此,看起來我們是否未通過角色授權屬性,只是檢查用戶是否已通過身份驗證。 在“角色”列表中設置每個角色對我來說不是一個選項(我的意思是[Authorize(Roles="role1,role2,...")] )。

因此,問題-我可以以某種方式實現設置Authorize屬性來檢查用戶是否具有任何角色。 還是最好編寫從上面繼承的自定義屬性?

創建如下的自定義屬性:

public override void OnAuthorization(AuthorizationContext filterContext)
{
    string[] userRoles = System.Web.Security.Roles.GetRolesForUser(filterContext.HttpContext.User.Identity.Name);

    if (!userRoles.Any())
    {
        throw new HttpException(401, "Unauthorized");
    }
    base.HandleUnauthorizedRequest(filterContext);
}

}

希望能幫助到你

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM