3

我对我的头上坦白地说明了实体级授权的要求。我希望得到关于这个权限结构的一些指导,我如何在.NET 4.5中实现它,以及是否有办法改进它。分层数据方案中的实体级访问控制

这里有云:


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

enter image description here

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

舰队以后可以重新组织和移动周围组织的目的。

我必须与系统中的权限,身兼数职,涉及到这些实体:

  • 业主:可以从舰队
  • 经理添加或删除汽车:指定司机汽车
  • 驱动程序:允许简单驱动汽车
  • 机械师:被允许修理汽车

授权逻辑允许User在系统中被授予到任何一个Fleet或与一个或多个角色一个Car访问。

这里有一些方案,以帮助解释:

  1. 如果我承认User吉姆访问Fleet#5Driver的角色,他被允许下驱动舰队#2的任何汽车。由此产生的权限允许他驾驶汽车#4,5,6
  2. 如果我授予用户Maura作为Mechanic访问Car #1,最终的权限允许她只修理1号车。
  3. 如果我授予用户萨拉访问舰队#2与角色OwnerMechanic,她被允许汽车中添加或删除她被允许修理汽车#1机队#2,4,5 , 2,3,4,5,6。
  4. 如果我授予用户杰里米访问船队#1作为Owner舰队#6作为Driver,得到的权限,让他的汽车添加和删除所有车队驱动汽车#7, 8.他不能开车超过#7和8

什么是一个好方法,这个实体级授权以外的任何其他汽车?

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

回答

0

要实现细粒度的授权让我想起了访问控制的对象(助理文书主任 - 这是想要的)和访问请求对象(的ARO - 这是想要的东西)在CakePHP's Access Control List (ACL) description有一些变化:

这里它简而言之:

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

首先理解逻辑是关键。其次,以任何语言实施。

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

干杯,