Параметры настройки BoilerPlate для LoginPath и AccessDeniedPath - PullRequest
0 голосов
/ 19 декабря 2018

Я использовал ASP.NET Boilerplate в качестве шаблона для моего приложения в качестве отправной точки.Я выбрал вариант многостраничного веб-приложения с настроенными страницами для входа, регистрации, пользователя, роли и арендатора.

Пытаясь реализовать свое разрешение, используя документацию по использованию IPermissionChecker, я столкнулся с бесконечнымцикл per-say.

Если я пытаюсь получить доступ к контроллеру или действию контроллера, использующему AbpMvcAuthorize или AbpAuthorize, меня перенаправляют на страницу входа.

На поверхности, которая кажется разумной, returnUrl установлен на URL, к которому я только что пытался получить доступ.Таким образом, при попытке войти снова, я в конечном итоге перенаправлен на страницу входа, так как обратный URL-адрес запрещает доступ пользователю.

Поскольку .NET Core построен на Identity, я искал, где можно настроить некоторые параметры, относящиеся к пути входа в систему, пути отказа в доступе и, возможно, используемому имени файла cookie.

Примерно так:

services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
    .AddCookie(CookieAuthenticationDefaults.AuthenticationScheme,
        options => 
        {
                options.LoginPath = new PathString("/Account/Login/");
                options.AccessDeniedPath = new PathString("/Account/Forbidden/");
        });

Однако простое добавление кода такого типа в startup.cs или событие в методе AuthConfigurer.cs Configure(), по-видимому, не меняет этого поведения.

Если кто-нибудь может дать какое-то руководство по этому вопросу, я был бы признателен.Я думал о добавлении нового фильтра и переопределении метода HandleUnauthorizedRequest, но простая возможность установить эти свойства где-то кажется более простым и менее сложным способом выполнения действий.

UPDATE

Чтобы прояснить ситуацию, вот как мы реализовали IPermissionChecker довольно просто, это приложение не требует чрезвычайно детального набора разрешений с childPermissions.Он очень простой и проистекает из того, какие разрешения по умолчанию были, когда мы начинали с шаблона.

public override void SetPermissions(IPermissionDefinitionContext context)
{
    context.CreatePermission(PermissionNames.Pages_Users, L("Users"));
    context.CreatePermission(PermissionNames.Pages_Roles, L("Roles"));
    context.CreatePermission(PermissionNames.Pages_About, L("About"));
    context.CreatePermission(PermissionNames.Pages_Builders, L("Builders"));
    context.CreatePermission(PermissionNames.Pages_Association, L("Association"));
    context.CreatePermission(PermissionNames.Pages_DraftType, L("DraftType"));        
}        

Тогда у нас есть набор констант в PermissionNames.cs

public static class PermissionNames
{
    public const string Pages_Users = "Pages.Users";

    public const string Pages_Roles = "Pages.Roles";

    public const string Pages_About = "Pages.About";

    public const string Pages_Builders = "Pages.Builders";

    public const string Pages_Association = "Pages.Associations";

    public const string Pages_DraftType = "Pages.DraftType";

}

Когдапытаясь реализовать эти разрешения, мы используем его с аннотациями атрибутов

[HttpGet]
[AbpMvcAuthorize(PermissionNames.Pages_DraftType)]
    public IActionResult Index()

Как указано выше, все это работает правильно.Просто если у меня нет прав доступа к ~/DraftType, я перенаправляюсь на /Account/Login?ReturnUrl=%2FDraftType.

Повторный ввод учетных данных пытается вернуть меня к '/ DraftType', но, поскольку у меня нет прав доступа к этой странице, я снова перенаправлен на URL входа, как показано выше.

Если мы вручную не удалим параметр returnUrl из адресной строки в браузере, пользователь не сможет вернуться в приложение.Вот почему я хотел бы иметь возможность различать LoginPath и AccessDeniedPath, чтобы при отказе в доступе пользователь перенаправлялся на страницу с ошибкой Forbidden Access.

Если сеанс пользователя истек, но у него есть разрешение, но требуется повторная аутентификация, мне нужно, чтобы поведение оставалось прежним.Они перенаправляются на URL-адрес для входа с ReturnURL, который позволит им напрямую попасть туда, где они пытались зайти.

...