В моем мире 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);
}
}
, а затем заменить его методом PreInitialize
вашего *.Core
модуля.
// using Abp.Configuration.Startup;
public override void PreInitialize()
{
Configuration.ReplaceService<IAuthorizationHelper, OverridingAuthorizationHelper>();
}