我正在 .NET Core 1.1 中构建一个 API。我建立了一个自定义User
对象来自HttpContext.User
在我的所有其他控制器继承自的基本控制器中,并且我默认启用身份验证(必须使用手动禁用[AllowAnonymous]
必要时)。这User
对象有一个IsAdmin
财产。现在我正在检查用户是否是每个相关功能顶部的管理员,如下所示,但我觉得必须有一种方法来添加自定义属性来简化和清理此代码。
以供参考,User.IsAdmin
是这个的简写:
bool.Parse(HttpContext.User.FindFirst("IsAdmin")?.Value)
而不是这个:
[HttpGet]
public async Task<IActionResult> Get()
{
if (!User.IsAdmin)
return Forbid();
// logic
}
我想要这个(或类似的东西):
[AdminOnly]
[HttpGet]
public async Task<IActionResult> Get()
{
// logic
}
我试着看看来源[AuthorizeAttribute] https://github.com/aspnet/Security/blob/dev/src/Microsoft.AspNetCore.Authorization/AuthorizeAttribute.cs尝试构建,但它只是一个外壳,我不知道真正的魔力发生在哪里。
我怎样才能做到这一点?
@JoeAudette 建议的解决方案似乎是最好的选择。
创建您自己的政策Startup.cs
配置服务():
services.AddAuthorization(options =>
options.AddPolicy("PolicyName", p =>
{
p.RequireAuthenticatedUser();
p.RequireClaim("IsAdmin", true); <- your criteria here (claim type, claim value) ???
p.Build();
})
);
然后将其用作属性:
[Authorize("PolicyName")]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)