AbpAuthorize属性所需的覆盖权限

时间:2018-11-08 12:50:16

标签: asp.net permissions authorization aspnetboilerplate .net-attributes

我得到了权限,角色和授权的概念。但是我无法掌握在多个位置添加时授权的工作方式。让我解释一下。

我有一个具有以下属性的应用程序服务类: [AbpAuthorize(PermissionNames.A)] 在该类中,我有一个具有以下属性的方法: [AbpAuthorize(PermissionNames.B)]

在我的世界中,B权限应优先于A权限,但是吗?对我来说,感觉并不像。有没有办法让我完成相同的功能?更复杂的是,A权限是MultiTenancySides.Host许可,而B则不是。

谢谢!

1 个答案:

答案 0 :(得分:0)

  

在我的世界中,B权限应优先于A权限,但是吗?

否,单独的AbpAuthorize属性是AND条件。

  

我是否可以完成[override]功能?

根本不同。您必须重写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);
    }
}

然后将其替换为PreInitialize模块的*.Core方法。

// using Abp.Configuration.Startup;

public override void PreInitialize()
{
    Configuration.ReplaceService<IAuthorizationHelper, OverridingAuthorizationHelper>();
}