.NET Core 3.1如何为文件夹额外授权角色且不修改原有目录结构
实现结论
完全可以在不修改现有文件夹结构的前提下实现该需求,这是ASP.NET Core授权体系支持的标准用法,也非常推荐这么做。
你当前预想的实现方案存在问题:如果直接修改RequireAdministrator策略允许两个角色访问,会导致整个Account目录下的所有路径都对DataConsulter角色开放,不符合你仅开放Account/Records子目录的需求。
正确实现方案
ASP.NET Core的授权约定遵循「路径匹配优先级随路径具体程度提升」的规则,子目录的授权配置优先级会高于父目录的配置,只需要在保留原有配置的基础上新增子目录的专属授权规则即可:
- 保留原有全部配置不变:
// 原有父目录授权配置,仅允许Administrator访问Account根目录及其他未单独配置的子目录 options.Conventions.AuthorizeAreaFolder("Administration", "/Account", "RequireAdministrator"); options.AddPolicy("RequireAdministrator", policy => policy .RequireRole("Administrator") .RequireAuthenticatedUser());
- 新增子目录授权配置:
// 新增子目录专属策略,允许两个角色任意其一即可访问 options.AddPolicy("AllowAdminOrDataConsulter", policy => policy // 多角色校验用逗号分隔传入参数数组即可,不需要使用||运算符 .RequireRole("Administrator", "DataConsulter") .RequireAuthenticatedUser()); // 绑定子目录到新策略,该配置优先级高于父目录的授权规则 options.Conventions.AuthorizeAreaFolder("Administration", "/Account/Records", "AllowAdminOrDataConsulter");
方案优势
该方案不需要修改现有文件夹结构,也不需要调整原有权限逻辑,权限粒度拆分清晰,后续如果需要调整Records目录的访问规则,只需要修改对应策略即可,不会影响父目录和其他子目录的权限配置,是官方推荐的权限粒度控制方案。
内容的提问来源于stack exchange,提问作者Henrique Pombo
相关产品推荐
相关产品推荐

