[英]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.