我正在使用 .net core 5.0 将一些初始 razor 代码升级到 asp .net razor 页面。我已经在 Microsoft Learn 上查看了许多示例,但似乎我必须在所有 .cshtml.cs 文件中设置属性。这感觉很草率并且容易出错,因为有些东西会被遗忘在某个地方。
在 .NET 4.x Razor 语法中,我有一个 _PageStart.cshtml 文件,我检查用户的角色,如果他们不属于特定角色,我会将他们重定向到登录页面。我想使用单个文件或配置在 asp .net core 中执行相同的操作。我不想在每个页面模型文件上放置一个属性,这看起来很草率。我想我会做这样的事情:
options.Conventions.AuthorizeFolder("/Club", "ClubAdmin");
其中 ClubAdmin 是应用程序中的角色,Club 是一个包含一堆 Razor 页面和子文件夹的文件夹。这可能吗?
为此,您可以在 Startup.cs 文件中定义一个策略来检查角色,然后配置 razor 页面以针对该特定策略授权该文件夹:
//define the admin policy
services.AddAuthorization(options =>
{
options.AddPolicy("AdminPolicy", policy => policy.RequireRole("Administrator"));
});
services.AddRazorPages(options =>
{
options.Conventions.AuthorizeFolder("/Admin", "AdminPolicy");
});
RequireRole
扩展方法注入一个RolesAuthorizationRequirement处理程序,该处理程序将在授权期间验证给定角色