分层数据方案中的实体级访问控制

时间:2017-02-08 18:14:12

标签: claims-based-identity access-control role-base-authorization role-based role-based-access-control

我要求实体级别的授权,坦率地说是我的头脑。我希望能获得有关此权限结构的一些指导,如何在.NET 4.5中实现它,以及是否有方法可以改进它。

这就是:

我有一组数据结构如下:

enter image description here

其中

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

随后可以对舰队进行重组并为组织目的而四处移动。

我在系统中拥有多个与这些实体相关的权限:

  • 所有者:可以从车队添加或删除汽车
  • 经理:将驱动程序分配给汽车
  • 驱动程序:只允许驾驶汽车
  • 机械师:允许修理汽车

授权逻辑允许系统中的User被授予对具有一个或多个角色的FleetCar的访问权限。

以下是一些有助于解释的方案:

  1. 如果我授予User Jim Fleet #5 Driver角色权限,他可以开车车队#2下的任何车辆。由此产生的权限允许他驾驶汽车#4,5,6
  2. 如果我授予用户 Maura 作为机械师Car #1的访问权限,则生成的权限只允许她修复汽车#1。
  3. 如果我授予用户 Sarah 使用角色OwnerMechanic访问舰队#2的权限,则允许她向车队#2,4添加和删除汽车, 5 AND 她被允许修理汽车#1,2,3,4,5,6。
  4. 如果我授予用户 Jeremy 作为Owner AND 作为Driver对舰队#6的权限,则生成的权限允许他为所有车队添加和删除汽车驾驶汽车#7,8。除了#7和8之外,他不能驾驶任何其他车。
  5. 这种实体级授权的好方法是什么?

    如果重要,我们会在ASP.net Boilerplate之上使用带有EF6 Code First的.NET 4.5.1。

1 个答案:

答案 0 :(得分:0)

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

简而言之:

您有ARO(车主,经理,司机,机械师)要求的ACO(车队和汽车)。如果您想知道请求者是否有权访问对象,您可以找到该对象的路径(Can John access "Car #3"?:找到" Car#3"来自root的路径:{{ 1}}),然后分配默认权限" Deny"到每个节点,但切换到"允许"如果该节点在请求者的允许节点列表中。如果最后一个节点最终以"允许"然后,好吧......允许,否则拒绝。

首先理解逻辑是关键。任何语言的实施都排在第二位。

我希望它指出你正确的方向。

干杯,