在分层数据架构中的实体级访问控制

6
我有一个实体级别授权的需求,但实际上我还无法理解。我希望能够得到一些关于权限结构的指导,以及如何在.NET 4.5中实现它,是否有可以改进的方法。

我有一组数据结构如下:

enter image description here

在这里:

  • Fleet 是零个或多个 Car 的集合。
  • Fleet 可以包含其他的 Fleet

为了组织目的,可以随后重新组织和移动车队。

我在系统中担任与这些实体相关的若干权限角色:

  • Owner: 可以添加或删除车辆到车队
  • Manager: 分配司机给车辆
  • Driver: 只允许驾驶车辆
  • Mechanic: 可以修理车辆

授权逻辑允许系统中的用户使用一个或多个角色访问 FleetCar

以下是一些示例来帮助解释:

  1. 如果我授予用户JimDriver角色的权限,让他可以访问车队Fleet#5,则他可以驾驶车队#2下的任何车辆。结果的权限允许他驾驶车辆#4#5#6
  2. 如果我授予用户MauraMechanic角色的权限,让她可以访问Car #1,则结果的权限只允许她修理车辆#1
  3. 如果我授予用户SarahOwnerMechanic角色的权限,让她可以访问车队#2,则她可以向车队#2#4#5中添加或删除车辆,并且可以修理车辆#1#2#3#4#5#6
  4. 如果我授予用户JeremyOwner角色的权限让他可以访问车队#1,并以Driver角色的权限让他可以访问车队#6,则结果的权限允许他向所有车队添加或删除车辆,并且可以驾驶车辆#7#8。但他不能驾驶除#7#8之外的其他车辆。

如何进行实体级别的授权?

如果有关系,我们使用建立在ASP.net Boilerplate之上的.NET 4.5.1和EF6 Code First。


我来晚了,但这个细粒度授权解决方案可能会对您有所帮助:https://zanzibar.academy/ - Maria Ines Parnisari
1个回答

1
您想要实现的细粒度授权让我想起 CakePHP's Access Control List (ACL) description 中的访问控制对象(ACOs - 想要的东西)和访问请求对象(AROs - 想要某些东西),但有一些变化:

简而言之:

您有ACOs(车队和汽车),将由AROs(所有者、经理、司机、技工)请求。如果您想知道请求者是否可以访问一个对象,您需要找到该对象的路径(John可以访问"Car #3"吗?:从根目录找到 "Car #3" 的路径:Fleet #1 > Fleet #2 > Car #3),然后为每个节点分配默认权限 "拒绝",但如果该节点在请求者的允许节点列表中,则将其切换为 "允许"。如果最后一个节点最终为 "允许",那么就允许访问,否则就拒绝。

首先理解逻辑非常重要,语言实现其次。

希望这能指引您朝正确的方向前进。

祝好!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接