Разрешение переопределения, требуемое атрибутом AbpAuthorize - PullRequest
0 голосов
/ 08 ноября 2018

Я получаю понятие разрешений, ролей и авторизации. Но я не могу понять, как работает Авторизация при добавлении в нескольких местах. Позвольте мне объяснить.

У меня есть класс обслуживания приложения с атрибутом: [AbpAuthorize(PermissionNames.A)] В этом классе у меня есть метод со следующим атрибутом: [AbpAuthorize(PermissionNames.B)]

В моем мире B-разрешение должно переопределять A-разрешение, но так ли это? Для меня это не так. Есть ли способ для меня, чтобы выполнить ту же функциональность? Чтобы сделать его еще более сложным, A-разрешение - это разрешение MultiTenancySides.Host, а B - нет.

Спасибо!

1 Ответ

0 голосов
/ 10 ноября 2018

В моем мире 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>();
}
...