Разрешение переопределения, требуемое атрибутом AbpAuthorize
Я получаю понятие разрешений, ролей и авторизации. Но я не могу понять, как работает Авторизация при добавлении в нескольких местах. Позволь мне объяснить.
У меня есть класс обслуживания приложения с атрибутом:[AbpAuthorize(PermissionNames.A)]
В этом классе у меня есть метод со следующим атрибутом:[AbpAuthorize(PermissionNames.B)]
В моем мире B-разрешение должно переопределять A-разрешение, но так ли это? Для меня это не похоже на это. Есть ли способ для меня, чтобы выполнить ту же функциональность? Чтобы сделать его еще более сложным, А-разрешение является MultiTenancySides.Host
разрешение, а Б нет.
Спасибо!
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);
}
}
А затем заменить его в PreInitialize
метод вашего *.Core
модуль.
// using Abp.Configuration.Startup;
public override void PreInitialize()
{
Configuration.ReplaceService<IAuthorizationHelper, OverridingAuthorizationHelper>();
}