c# - 在 ASP.NET Core 3 中实现细粒度权限
问题描述
我想为我的新 ASP.NET Core 3 应用程序提供细粒度的权限。应用程序中会有很多区域(一开始有几个,但每个新功能都会与另一个区域一起控制访问),我怀疑迟早我需要精确的访问控制(例如,这个用户应该可以访问Employee
PLUS 区域 X、Y RW 和区域 Z RO)。
自己实现这样的机制很容易,但我想使用 ASP 的内置机制,而不是从头开始编写所有内容。因此,根据我对 ASP.NET Core 授权机制的了解,我将采用以下方式:
- 为用户提供声明,这将通过标志(例如,列表、读取、写入、删除、管理员)控制对特定区域的访问
- 创建 的实现
IAuthorizationPolicyProvider
,这将根据传递的参数动态创建特定的策略,例如:[Authorize(Policy = "Area1,r")]
或[Authorize(Policy = "Area5,a")]
(使用动态创建的处理程序) IAuthorizationPolicyProvider
使用依赖注入系统注册我的自定义
老实说,这对我来说似乎有点过度设计,因为我可以实现自己的授权属性,对于初学者来说,这将简化输入限制(也就是说,访问定义中的错误将在编译期间被捕获,而不是在应用程序运行期间):
[RestrictAccess(Areas.Area1, AreaAccess.Read)]
public IActionResult MyAction() { }
但是,这似乎是一种解决方案,它规避了使用 ASP.NET Core 机制,因为我之前介绍的似乎是微软希望我们使用策略的方式(请参阅自定义授权策略)
TL;DR:在 ASP.Net Core 3 中实现这种细粒度权限的正确方法是什么?此外,按照微软建议的方式实现权限的实际优势是什么?
解决方案
推荐阅读
- c# - 如何将巨大的 txt 文件读取到 ObservableCollection
- python - 我需要从创建它的函数外部更新一些标签文本
- python - Matplotlib:自定义日期刻度标签
- css - 将按钮类添加到使用 html 帮助器的表格单元格
- nginx - 使用 NGINX 作为反向代理的错误网关
- c# - 使用 HTML Agility Pack 查找多个表
- c# - 检查 JSON 是否包含 C#
- java - EnitityManager 删除 - IllegalArgumentException:未知实体:java.lang.Integer] 有根本原因
- java - Java 服务器通过 TCP 接收大数据比预期慢
- node.js - 如何将POST保存到节点中的全局变量