c# - 使用 Autofac 的基于特征标志的授权
问题描述
我正在尝试在整个环境中推出授权,并希望在它向南时将其标记为快速回滚。一旦我们知道所有服务都与 OAuth 保持一致,此功能将被删除并成为永久性功能。我选择了IAutofacAuthorizationFilter
注入一个对象来确定典型属性不提供的特征标志状态。
我想启用默认行为,就好像我已经装饰了控制器,[Authorize]
如果该功能为真,否则让方法在没有它的情况下执行,但是我无法从IAutofacAuthorizationFilter
没有基类的内部启用默认行为像await base.OnAuthorizationAsync(actionContext, cancellationToken);
里面一样覆盖AuthorizeAttribute
。
到目前为止我所做的工作:
public class FeatureBasedAuthorizeAttribute : IAutofacAuthorizationFilter
{
private readonly IFeatureManager _featureManager;
public FeatureBasedAuthorizeAttribute(IFeatureManager featureManager)
{
_featureManager = featureManager;
}
public async Task OnAuthorizationAsync(HttpActionContext actionContext, CancellationToken cancellationToken)
{
if (_featureManager.IsEnabled<EnableAppAuthorization>())
{
// Return result of default ASP.Net authorization here... How?
}
// Return without Authorization (current state)
await Task.FromResult(0);
}
}
// Wire up in startup.cs
builder.Register(c => new FeatureBasedAuthorizeAttribute(c.Resolve<IFeatureManager>()))
.AsWebApiAuthorizationFilterForAllControllers()
.InstancePerRequest();
解决方案
最终,远离屏幕的时间为我解决了这个问题。我的解决方案是这样的:
public async Task OnAuthorizationAsync(HttpActionContext actionContext, CancellationToken cancellationToken)
{
if (_featureManager.IsEnabled<EnableAppAuthorization>())
{
// Return result of default ASP.Net authorization
var authorizeAttribute = new AuthorizeAttribute();
await authorizeAttribute.OnAuthorizationAsync(actionContext, cancellationToken);
}
// Return without Authorization (current state)
await Task.FromResult(0);
}
推荐阅读
- html - 在 CSS 网格中对齐表单标签?
- node.js - 在 Windows 10 Pro 上通过 NPM 安装后无法运行 OpenSSL
- haskell - Haskell 异常:Prelude.Enum.().toEnum:错误的论点
- javascript - 如何在返回所有值之前等待所有承诺解决?
- entity-framework-core - EntityFrameworkCore Task.WhenAll() 在前一个操作完成之前在此上下文中启动了第二个操作
- sql - 递归 - 在 sql 中链接数据 - 卡住
- ruby-on-rails - Ruby -v 显示 2.6.3,但终端说我在尝试运行 rails 控制台时正在运行 2.3.7
- vba - 如何使用 VBA 将 Word 中表格中的单元格内容转换为图像?
- jquery - 用于在页面中查找下一页按钮的 jQuery
- mysql - 有人有相同的名字、中间名和姓氏吗?列出他们和他们的完整地址