覆盖 AbpAuthorize 属性所需的权限
Overriding permission required by AbpAuthorize attribute
我了解权限、角色和授权的概念。但是当在多个地方添加授权时,我无法理解授权是如何工作的。让我解释一下。
我有一个应用程序服务 class 具有以下属性:
[AbpAuthorize(PermissionNames.A)]
在那个 class 中,我有一个具有以下属性的方法:
[AbpAuthorize(PermissionNames.B)]
在我的世界中,B 权限应该优先于 A 权限,但是真的如此吗?对我来说,它不喜欢它。有没有办法让我完成相同的功能?更复杂的是,A 权限是 MultiTenancySides.Host
权限,而 B 不是。
谢谢!
In my world the B-permission should override the A-permission, but does it?
否,单独的 AbpAuthorize
属性是 AND
条件。
Is there a way for me to accomplish the [override] functionality?
这是根本不同的。你必须重写 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>();
}
我了解权限、角色和授权的概念。但是当在多个地方添加授权时,我无法理解授权是如何工作的。让我解释一下。
我有一个应用程序服务 class 具有以下属性:
[AbpAuthorize(PermissionNames.A)]
在那个 class 中,我有一个具有以下属性的方法:
[AbpAuthorize(PermissionNames.B)]
在我的世界中,B 权限应该优先于 A 权限,但是真的如此吗?对我来说,它不喜欢它。有没有办法让我完成相同的功能?更复杂的是,A 权限是 MultiTenancySides.Host
权限,而 B 不是。
谢谢!
In my world the B-permission should override the A-permission, but does it?
否,单独的 AbpAuthorize
属性是 AND
条件。
Is there a way for me to accomplish the [override] functionality?
这是根本不同的。你必须重写 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>();
}