.NET Core中的自定义授权属性

我正在.NET Core 1.1中构建一个API。 我在HttpContext.User中构建了一个自定义User对象,该控制器是我所有其他控制器inheritance的基本控制器,我默认启用了身份validation(必要时必须手动禁用[AllowAnonymous] )。 User对象具有IsAdmin属性。 现在我正在检查用户是否是每个相关function顶部的管理员,如下所示,但我觉得必须有一种方法来添加自定义属性来简化和清理此代码。

作为参考, User.IsAdmin是这方面的简写:

 bool.Parse(HttpContext.User.FindFirst("IsAdmin")?.Value) 

而不是这个:

 [HttpGet] public async Task Get() { if (!User.IsAdmin) return Forbid(); // logic } 

我喜欢这个(或类似的东西):

 [AdminOnly] [HttpGet] public async Task Get() { // logic } 

我试着查看[AuthorizeAttribute]的源代码来尝试构建,但它只是一个shell而且我不知道真正的魔法发生在哪里。

我怎么能做到这一点?

@JoeAudette建议的解决方案似乎是最好的选择。

Startup.cs创建自己的策略:

 options.AddPolicy("PolicyName", p => { p.RequireAuthenticatedUser(); p.RequireClaim("IsAdmin", true); <- your criteria here (claim type, claim value) ??? p.Build(); }); 

然后只需将其用作属性:

 [Authorize("PolicyName")]