Разрешение переопределения, требуемое атрибутом 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>();
}
Другие вопросы по тегам