Razor Pages中如何按角色限制整个文件夹或Area的访问权限
Razor Pages 文件夹/Area 全局访问权限限制实现方案
以下方案适用于.NET Core 3.1及以上(包含.NET 6/7/8)的当前版本Razor Pages,为官方推荐实现方式
方案1:通过Program.cs配置授权约定(推荐)
无需逐个页面添加[Authorize]属性,直接在服务注册阶段统一配置规则即可。
限制指定文件夹下所有页面
builder.Services.AddRazorPages(options => { // 限制Pages/Admin文件夹下所有页面仅Admin角色可访问 options.Conventions.AuthorizeFolder("/Admin", "Admin"); // 仅要求登录即可访问,不限制角色/策略的写法 options.Conventions.AuthorizeFolder("/MemberOnly"); // 单独排除文件夹下的某一页面,允许匿名访问 options.Conventions.AllowAnonymousToPage("/Admin/Login"); });
参数说明:
- 第一个参数为Razor Pages根目录(默认是项目下的Pages文件夹)的相对路径
- 第二个可选参数为需要匹配的角色名或授权策略名
限制指定Area下所有页面
builder.Services.AddRazorPages(options => { // 限制名为Dashboard的Area下所有页面仅Admin角色可访问 options.Conventions.AuthorizeAreaFolder("Dashboard", "/", "Admin"); // 排除Area下的指定页面允许匿名访问 options.Conventions.AllowAnonymousToAreaPage("Dashboard", "/Login"); });
参数说明:
- 第一个参数为Area的名称
- 第二个参数为Area内Pages目录的相对路径,传
/即代表整个Area下的所有页面 - 第三个可选参数为需要匹配的角色名或授权策略名
方案2:通过_ViewImports.cshtml配置
如果偏好基于文件层级的配置方式,可以在目标文件夹/Area的Pages目录下新增_ViewImports.cshtml文件,添加如下内容:
@using Microsoft.AspNetCore.Authorization @attribute [Authorize(Roles = "Admin")]
该配置会自动应用到同级及子级所有的Razor Page页面,若子目录存在单独的_ViewImports.cshtml,会覆盖上层配置。
内容的提问来源于stack exchange,提问作者Jonathan Wood
相关产品推荐
相关产品推荐

