【问题标题】: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>();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-17
      • 2020-12-02
      • 1970-01-01
      相关资源
      最近更新 更多