Установите политику идентификации для всех областей, кроме одной

#c# #asp.net #.net #asp.net-core #razor-pages

Вопрос:

Я пытаюсь реализовать ролевую авторизацию в своем приложении Razor Pages.

Вот что у меня есть на данный момент.

 // Create authorization policies
services.AddAuthorization(options =>
{
    options.AddPolicy("Staff", p => p.RequireRole(Role.Staff));
    options.AddPolicy("Admin", p => p.RequireRole(Role.Admin));
});

// Set authorization
services.AddRazorPages(options =>
{

    options.Conventions.AuthorizeFolder("/", Role.Staff);
    options.Conventions.AuthorizeAreaFolder("/", "/", Role.Staff);

    options.Conventions.AuthorizeAreaFolder("Admin", "/", Role.Admin);
    options.Conventions.AuthorizeAreaFolder("Leasing", "/", Role.Staff);
    options.Conventions.AuthorizeAreaFolder("Repair", "/", Role.Staff);
    options.Conventions.AuthorizeAreaFolder("Storage", "/", Role.Staff);
    options.Conventions.AuthorizeAreaFolder("Transloading", "/", Role.Staff);

    options.Conventions.AllowAnonymousToPage("/Index");
    options.Conventions.AllowAnonymousToPage("/Error");
});
 

Кажется, это работает. Проблема заключается в том, чтобы явно указать каждую из папок «Моя область». Что произойдет, если будет добавлена новая область, но они забудут добавить ее сюда? Это небезопасный подход.

Примечание: Я не уверен, что options.Conventions.AuthorizeAreaFolder("/", "/", Role.Staff) делает, но довольно ясно, что он не устанавливает авторизацию для всех областей, как я хочу.

Как я могу задать политику для каждой области (включая области, добавленные в будущем) в «Персонал», за исключением области администратора, в которой должна быть политика «Администратор»?

Примечание: Я использую последнюю версию .NET 5.

Комментарии:

1. Я полностью понимаю ваш вопрос, но политики не могут применяться на уровне обработчика страницы Razor, они должны применяться к Странице. Политики могут быть применены к страницам Razor с помощью соглашения об авторизации . И мы можем использовать только метод AuthorizeAreaFolder (), чтобы установить авторизацию для каждой области. Я не нашел более простого способа установить авторизацию для всех областей сразу. Я предлагаю вам отправить отзыв в dotnet/aspnetcore .