【发布时间】:2017-05-22 10:04:06
【问题描述】:
我正在 .NET Core 1.1 中构建 API。我在我所有其他控制器都继承自的基本控制器中从HttpContext.User 构建了一个自定义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
}
我尝试查看 source for [AuthorizeAttribute] 以尝试构建,但它只是一个外壳,我不知道真正的魔法发生在哪里。
我怎样才能做到这一点?
【问题讨论】:
-
我建议阅读有关基于策略的授权的文档,您基本上使用带有命名策略的属性,然后在启动时定义策略以要求某些角色或声明或其他规则docs.microsoft.com/en-us/aspnet/core/security/authorization/…
-
查看@blowdart 的答案(负责 ASP.NET Core 安全),您不应该(或需要)创建自己的属性
-
@JoeAudette 看起来这就是我需要的,不知道我是怎么错过的。 :/ Claims-based auth 会起作用,因为我只需要验证声明是
true。如果您将其添加为答案,我会接受。
标签: c# asp.net-core asp.net-core-mvc asp.net-core-webapi