参见英文答案 >
How do you create a custom AuthorizeAttribute in ASP.NET Core?6个
我正在.NET Core 1.1中构建一个API.我在HttpContext.User中构建了一个自定义User对象,该控制器是我所有其他控制器继承的基本控制器,我默认启用了身份验证(必要时必须手动禁用[AllowAnonymous]). User对象具有IsAdmin属性.现在我正在检查用户是否是每个相关功能顶部的管理员,如下所示,但我觉得必须有一种方法来添加自定义属性来简化和清理此代码.
我正在.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]
尝试构建,但它只是一个shell,我不知道真正的魔法发生在哪里.
我怎么能做到这一点?
解决方法
@JoeAudette建议的解决方案似乎是最好的选择.
在Startup.cs ConfigureServices()中创建自己的策略:
services.AddAuthorization(options => options.AddPolicy("PolicyName",p => { p.RequireAuthenticatedUser(); p.RequireClaim("IsAdmin",true); <- your criteria here (claim type,claim value) ??? p.Build(); }) );
然后只需将其用作属性:
[Authorize("PolicyName")]
原文地址:https://www.jb51.cc/netcore/243181.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。