覆盖 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>();
}