You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在.NET 5 Razor Pages中为除Admin外所有区域设置统一Identity授权策略

问题根因

你之前使用的options.Conventions.AuthorizeAreaFolder("/", "/", Role.Staff)无法生效,原因是该方法的第一个参数需要传入明确的Area名称,不支持通配符匹配所有Area,所以无法实现全局Area默认授权的效果。

解决方案

通过自定义Razor Pages约定实现批量授权规则配置,后续新增Area无需额外修改授权配置即可自动应用默认规则:

  1. 首先实现自定义约定类
using Microsoft.AspNetCore.Mvc.ApplicationModels;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc.Authorization;

public class GlobalAreaAuthorizeConvention : IPageConvention
{
    private readonly string _defaultAreaPolicy;
    private readonly string _adminAreaPolicy;
    private const string AdminAreaName = "Admin";

    public GlobalAreaAuthorizeConvention(string defaultAreaPolicy, string adminAreaPolicy)
    {
        _defaultAreaPolicy = defaultAreaPolicy;
        _adminAreaPolicy = adminAreaPolicy;
    }

    public void Apply(PageApplicationModel pageModel)
    {
        // 仅处理属于Area的页面
        if (string.IsNullOrEmpty(pageModel.AreaName)) return;

        var authorizeAttribute = pageModel.AreaName.Equals(AdminAreaName, StringComparison.OrdinalIgnoreCase)
           ? new AuthorizeAttribute(_adminAreaPolicy)
            : new AuthorizeAttribute(_defaultAreaPolicy);
        
        pageModel.Filters.Add(new AuthorizeFilter(authorizeAttribute));
    }
}
  1. 修改服务注册代码,删除原来所有逐个声明Area授权的配置,替换为自定义约定的注册
// 注册授权策略
services.AddAuthorization(options =>
{
    options.AddPolicy("Staff", p => p.RequireRole(Role.Staff));
    options.AddPolicy("Admin", p => p.RequireRole(Role.Admin));
});

// 配置Razor Pages
services.AddRazorPages(options =>
{
    // 保留根目录非Area页面的授权规则
    options.Conventions.AuthorizeFolder("/", "Staff");
    
    // 注册全局Area授权约定
    options.Conventions.Add(new GlobalAreaAuthorizeConvention("Staff", "Admin"));

    // 保留匿名访问配置
    options.Conventions.AllowAnonymousToPage("/Index");
    options.Conventions.AllowAnonymousToPage("/Error");
});

配置效果

  • 所有Area(包括后续新增的Area)会默认应用Staff授权策略,无需额外配置
  • Admin区域会自动应用Admin授权策略,优先级高于默认规则
  • 若存在特殊Area需要自定义权限,可以继续通过AuthorizeAreaFolder/AuthorizeAreaPage显式配置,优先级高于全局约定

内容的提问来源于stack exchange,提问作者Jonathan Wood

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 10:45:03