【问题标题】:Overriding permission required by AbpAuthorize attributeAbpAuthorize 属性所需的覆盖权限
【发布时间】:2019-04-11 23:36:19
【问题描述】:
我了解了权限、角色和授权的概念。但是当在多个地方添加授权时,我无法掌握授权的工作原理。让我解释一下。
我有一个具有以下属性的应用程序服务类:
[AbpAuthorize(PermissionNames.A)]
在该类中,我有一个具有以下属性的方法:
[AbpAuthorize(PermissionNames.B)]
在我的世界里,B 权限应该覆盖 A 权限,但真的吗?对我来说,感觉不像。有没有办法让我完成相同的功能?更复杂的是,A 权限是 MultiTenancySides.Host 权限,而 B 不是。
谢谢!
【问题讨论】:
标签:
asp.net
permissions
authorization
aspnetboilerplate
.net-attributes
【解决方案1】:
在我的世界里,B 权限应该覆盖 A 权限,但是是这样吗?
不,单独的AbpAuthorize 属性是AND 条件。
有没有办法让我完成 [覆盖] 功能?
这是根本不同的。你必须重写IAuthorizationHelper。
public class OverridingAuthorizationHelper : AuthorizationHelper
{
public OverridingAuthorizationHelper(IFeatureChecker featureChecker, IAuthorizationConfiguration authConfiguration)
: base(featureChecker, authConfiguration)
{
}
public override Task AuthorizeAsync(IEnumerable<IAbpAuthorizeAttribute> authorizeAttributes)
{
if (authorizeAttributes.Any())
{
authorizeAttributes = new List<IAbpAuthorizeAttribute> { authorizeAttributes.First() };
}
return base.AuthorizeAsync(authorizeAttributes);
}
}
然后在 *.Core 模块的 PreInitialize 方法中替换它。
// using Abp.Configuration.Startup;
public override void PreInitialize()
{
Configuration.ReplaceService<IAuthorizationHelper, OverridingAuthorizationHelper>();
}