【问题标题】:Entity-level access control in a hierarchical data scheme分层数据方案中的实体级访问控制
【发布时间】:2017-06-26 12:21:07
【问题描述】:

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

这里是:


我有一组数据结构如下:

在哪里

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

以后可以出于组织目的对舰队进行重组和移动。

我在系统中有几个角色具有与这些实体相关的权限:

  • 车主:可以在车队中添加或移除汽车
  • 经理:为汽车分配司机
  • 司机:允许简单地驾驶汽车
  • 技工:可以修车

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

这里有一些场景可以帮助解释:

  1. 如果我授予User JimDriver 的角色访问Fleet #5,他就可以驾驶车队#2 下的任何汽车.由此产生的权限允许他驾驶 #4、5、6 号汽车
  2. 如果我授予用户 Maura 作为 Mechanic 访问 Car #1 的权限,则生成的权限仅允许她修理 #1 车。
  3. 如果我授予用户 Sarah 使用角色 OwnerMechanic 访问 Fleet #2,则允许她向 Fleet #2、4、5 添加和删除汽车 并且她可以修理 #1、2、3、4、5、6 号车。
  4. 如果我授予用户 JeremyOwnerANDDriver 身份访问 Fleet #6 的用户 Jeremy,则生成的权限允许他添加并将车辆移至所有车队驾驶 7 号、8 号车。他不能驾驶除 7 号和 8 号车以外的任何其他车辆。

这种实体级授权的好方法是什么?

如果重要的话,我们使用 .NET 4.5.1 和 EF6 Code First,构建在 ASP.net Boilerplate 之上。

【问题讨论】:

  • 我来晚了,但是这个细粒度的授权解决方案可以帮助你:zanzibar.academy

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


【解决方案1】:

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

简而言之:

您有 ARO(车主、经理、司机、机械师)将要求的 ACO(车队和汽车)。如果您想知道请求者是否有权访问某个对象,您可以找到该对象的路径(Can John access "Car #3"?:从根目录查找“Car #3”的路径:Fleet #1 > Fleet #2 > Car #3),然后分配默认权限“拒绝”到每个节点,但如果该节点在请求者的允许节点列表中,则将其切换为“允许”。如果最后一个节点以“允许”结尾,那么,好吧......允许,否则拒绝。

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

我希望它能为您指明正确的方向。

干杯,

【讨论】:

    猜你喜欢
    • 2013-11-27
    • 2012-05-02
    • 2011-02-26
    • 1970-01-01
    • 2018-11-04
    • 2015-01-15
    • 2011-11-14
    • 2017-10-19
    • 1970-01-01
    相关资源
    最近更新 更多