假设我有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属性只检查用户是否经过身份验证。在角色列表中设置每个角色对我来说都不是一个选项(我的意思是[Authorize(Roles="role1,role2,...")]
)。
因此问题 - 我可以以某种方式实现设置Authorize属性以检查用户是否具有任何角色。或者最好编写从上面继承的自定义属性?
答案 0 :(得分:0)
创建如下所示的自定义属性:
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);
}
}
希望有所帮助