【问题标题】:Access control on different tables with parent/child relationships具有父/子关系的不同表的访问控制
【发布时间】:2016-07-10 16:32:45
【问题描述】:

我正在尝试在我正在编写的应用程序中设置访问控制。我见过诸如 ACL 和角色/权限系统之类的方法(例如描述的 here 和许多其他方法,以及 Nested Set Model),但我不确定是否可以使用这些方法实现我的目标。

我正在尝试做的是找到一种方法来允许访问对象的子项。问题是孩子存储在不同的表中并代表不同的实体。一个例子:

City > Streets (city_id) > Houses (street_id) > People (house_id)

在这种情况下,这些对象中的每一个都存储在数据库中的不同表中,并使用带括号的字段指向其父对象。我想要做的是能够仅授予用户“城市”级别的权限(即授予城市#10 的权限),这将授予下面各种桌子上的所有孩子的访问权限,无论是街道、房屋、或人。 (因此,我可以询问“用户 A 是否有权访问 16 号房屋?”系统可以确定 16 号房屋是否是 10 号城市对象的子/孙等。)

现在,我知道这可以通过在数据库中使用多个连接等来完成,但这感觉像是一种“蛮力”方法,并且不会非常干燥或可重复使用。如果可能的话,我希望找到一种更有效/不那么天真的方法来实现这一目标。谢谢!

【问题讨论】:

    标签: php mysql permissions hierarchy


    【解决方案1】:

    找到答案:Models for Hierarchical Data in SQL and PHP

    那个视频谈到了我正在寻找的“封闭表”。使用闭包表中的“深度”和“祖先”字段,我可以从层次结构的任何级别(人物、房屋、街道)查明数据所属的城市。

    我还创建了一个“安全对象”表,其中 people、houses 和 street 表的每一行都有一行。然后我的闭包表(以及一些配置来告诉每个子表的深度应该是多少)将它们关联成一棵树。然后,使用配置的深度,我可以随时从单个查询中的任何节点获取城市树​​的根!快!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-20
      • 1970-01-01
      • 2015-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多