gpt4 book ai didi

claims-based-identity - 分层数据方案中的实体级访问控制

转载 作者:行者123 更新时间:2023-12-01 06:03:53 26 4
gpt4 key购买 nike

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

它是这样的:

我有一组结构如下的数据:

enter image description here

在哪里

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

  • 舰队可以在以后重组和移动以用于组织目的。

    我在系统中有多个具有与这些实体相关的权限的角色:
  • 业主 :可以在车队中添加或移除汽车
  • 经理 : 为汽车分配司机
  • 司机 : 可以简单地开车
  • 机械师 : 可以修车

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

    以下是一些有助于解释的场景:
  • 如果我授予 User吉姆访问 Fleet #5 与 Driver 的角色,他可以驾驶 2 号车队下的任何汽车。由此产生的权限允许他驾驶汽车 #4, 5, 6
  • 如果我授予用户 Maura 访问 Car #1 的权限作为一名机械师,由此产生的权限只允许她修理 #1 号汽车。
  • 如果我授予用户 Sarah 访问 Fleet #2 的权限,角色为 OwnerMechanic ,她被允许添加和移除车队 #2、4、5 她被允许修理汽车 #1, 2, 3, 4, 5, 6。
  • 如果我以 Owner 的身份授予用户 Jeremy 对车队 #1 的访问权限到舰队 #6 作为 Driver ,由此产生的权限允许他向所有车队添加和移除汽车 驾驶汽车#7、8。除了#7和8之外,他不能驾驶任何其他汽车。


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

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

    最佳答案

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

    简而言之:

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

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

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

    干杯,

    关于claims-based-identity - 分层数据方案中的实体级访问控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42120639/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com