我目前有一个包含数据元素的树结构;在这些中,每个都可以执行基本的CRUD操作。从这里开始,我需要为这四个操作中的每一个实现每用户权限。因此,给定用户可以被赋予创建和读取,但没有更新或删除权限。然后,这些权限将树向下级联到允许对象的任何子级;因此,给定用户将对根对象的任何子对象具有Create和Read。
使用SQL(特定于PHP的MySQL)数据库存储这些权限的最佳方法是什么?目前我认为理想的解决方案可能是创建另一个数据库表,跟踪用户ID,对象ID,然后是跟踪每个可能权限的布尔列表,然后根据权限表检查用户ID和对象ID,沿着树向上行进,直到找到一个许可对象(或未找到,视具体情况而定)。
我的主要问题是双重问题。首先,它使得不可能允许一个对象,而不是它的孩子。其次,它似乎可能会对特别深的物体造成性能影响。那么,看起来这是一个好方法呢?
答案 0 :(得分:1)
递归数据结构通常很难“映射”到SQL查询。有些数据库对它有特殊支持(例如Oracle),但MySQL has no built-in support(=你可以解决这个问题,但它很笨拙)。
我们在申请中需要类似的东西。我们的解决方案是在一个简单的表中存储标准化数据(即“用户X在节点Z上具有权限Y” - >具有FK关系的三列)。
DAO / manager对象读取此表并构建一个缓存,以便在需要时快速查找权限。
总结:保持数据库简单并在应用程序中编写特殊的帮助程序代码,将数据库转换为您需要的结构。