asp.net - 如何在 ASP.NET Core 中自定义/覆盖 User.IsInRole
问题描述
我是 ASP.NET Core 的新手,我在控制器的 User 属性(在 ClaimsPrincipal 类中)中看到,它有 User.IsInRole 方法,所以我如何重写它来调用我的服务依赖项并在我的应用程序中注册(我不想使用扩展方法)。
解决方案
您可以使用 ClaimsTransformation:
public class Startup
{
public void ConfigureServices(ServiceCollection services)
{
// ...
services.AddTransient<IClaimsTransformation, ClaimsTransformer>();
}
}
public class CustomClaimsPrincipal : ClaimsPrincipal
{
public CustomClaimsPrincipal(IPrincipal principal): base(principal)
{}
public override bool IsInRole(string role)
{
// ...
return base.IsInRole(role);
}
}
public class ClaimsTransformer : IClaimsTransformation
{
public Task<ClaimsPrincipal> TransformAsync(ClaimsPrincipal principal)
{
var customPrincipal = new CustomClaimsPrincipal(principal) as ClaimsPrincipal;
return Task.FromResult(customPrincipal);
}
}
控制器方法:
[Authorize(Roles = "Administrator")]
public IActionResult Get()
{
// ...
}
Authorize 属性的角色检查将使用您覆盖的 IsInRole 方法
推荐阅读
- javascript - AngularJs:我有一个带有选项列表的下拉列表,清除它会删除默认值
- reactjs - 如何连接 Reactjs 和 Laravel
- ios - @ObservedObject 未更新
- web-scraping - 使用 requests-html python 库,我如何滚动?到页尾
- api - 带有进度条和“取消”按钮的 Revit 外部命令
- tomcat - TomEE PolicyConfigurationFactory & TransactionManagerImpl 错误
- sas - SAS 参数 logconfigloc 和常规日志输出
- spring - if/else 在我的 SpringBoot rest api POST 方法中不起作用
- python - Python:数据框的欧洲日期到欧洲 unix 时间戳
- python - 使用 Conv2DTranspose 输出其输入形状的双倍