Asp .net core — авторизует доступ ко всем файлам в папке с помощью ролей

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

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

Вопрос:

Я обновляю некоторый исходный код razor на страницы asp .net razor с помощью .net core 5.0. Я просмотрел много примеров на сайте Microsoft, но, похоже, мне нужно установить атрибуты во всех моих файлах .cshtml.cs. это выглядит просто неаккуратно и подвержено ошибкам, потому что где-то что-то будет забыто.

В .net 4.x razor у меня есть файл _PageStart.cshtml, я проверяю роль пользователя и перенаправляю их на страницу входа, если они не входят в определенную роль. Я хотел бы сделать то же самое в asp .net core, используя один файл или конфигурацию. Я не хочу помещать атрибут в каждый файл pagemodel, это просто кажется неаккуратным. Я полагаю, что я бы сделал что-то вроде:

 options.Conventions.AuthorizeFolder("/Club", "ClubAdmin");
  

где ClubAdmin — это роль в приложении, а Club — это папка, содержащая кучу страниц razor и вложенных папок. Возможно ли это?

TIA

Ответ №1:

Для этого вы можете определить политику в своем файле Startup.cs, которая проверяет наличие роли, а затем настроить razor pages для авторизации этой папки в соответствии с этой конкретной политикой:

 //define the admin policy
services.AddAuthorization(options =>
{
    options.AddPolicy("AdminPolicy", policy => policy.RequireRole("Administrator"));
});

services.AddRazorPages(options =>
{
    options.Conventions.AuthorizeFolder("/Admin", "AdminPolicy");
});
  

Метод RequireRole расширения вводит обработчик RolesAuthorizationRequirement, который будет проверять соответствие заданной роли во время авторизации