我要求实体级别的授权,坦率地说是我的头脑。我希望能获得有关此权限结构的一些指导,如何在.NET 4.5中实现它,以及是否有方法可以改进它。
这就是:
我有一组数据结构如下:
其中
Fleet
是零个或多个Cars
。Fleet
可以包含其他Fleets
随后可以对舰队进行重组并为组织目的而四处移动。
我在系统中拥有多个与这些实体相关的权限:
授权逻辑允许系统中的User
被授予对具有一个或多个角色的Fleet
或Car
的访问权限。
以下是一些有助于解释的方案:
User
Jim Fleet
#5 的Driver
角色权限,他可以开车车队#2下的任何车辆。由此产生的权限允许他驾驶汽车#4,5,6 Car #1
的访问权限,则生成的权限只允许她修复汽车#1。Owner
和Mechanic
访问舰队#2的权限,则允许她向车队#2,4添加和删除汽车, 5 AND 她被允许修理汽车#1,2,3,4,5,6。Owner
AND 作为Driver
对舰队#6的权限,则生成的权限允许他为所有车队添加和删除汽车和驾驶汽车#7,8。除了#7和8之外,他不能驾驶任何其他车。这种实体级授权的好方法是什么?
如果重要,我们会在ASP.net Boilerplate之上使用带有EF6 Code First的.NET 4.5.1。
答案 0 :(得分:0)
您要实现的细粒度授权让我想起了CakePHP's Access Control List (ACL) description中的访问控制对象(ACO - 需要的东西)和访问请求对象(AROs - 想要的东西),但有一些变化:
简而言之:
您有ARO(车主,经理,司机,机械师)要求的ACO(车队和汽车)。如果您想知道请求者是否有权访问对象,您可以找到该对象的路径(Can John access "Car #3"?
:找到" Car#3"来自root的路径:{{ 1}}),然后分配默认权限" Deny"到每个节点,但切换到"允许"如果该节点在请求者的允许节点列表中。如果最后一个节点最终以"允许"然后,好吧......允许,否则拒绝。
首先理解逻辑是关键。任何语言的实施都排在第二位。
我希望它指出你正确的方向。
干杯,