#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, который будет проверять соответствие заданной роли во время авторизации