当前位置: 首页 > 面试题库 >

树结构中用户的CRUD权限

耿学义
2023-03-14
问题内容

我目前有一个包含数据元素的树结构;在每一个上,都可以执行基本的CRUD操作。从这里开始,我需要为这四个操作中的每一个实现每个用户的权限。因此,可以为给定的用户提供“创建”和“读取”权限,但是没有“更新”或“删除”权限。然后,这些权限将把树向下层叠到允许对象的任何子级。因此,该给定的用户将具有针对根对象的所有子对象的Create和Read权限。

使用SQL(专用于MySQL和PHP)数据库存储这些权限的最佳方法是什么?当前,我在想理想的解决方案可能是创建另一个数据库表,该数据库表跟踪一个用户ID,一个对象ID,然后是一个跟踪每个可能的权限的布尔值列表,然后对照该权限表检查该用户ID和对象ID,并在树上向上行驶,直到找到(或视情况而定)许可对象为止。

我的主要问题是双重的。首先,它使得不可能授予一个对象,但不允许其子对象。其次,它似乎可能对特别深的物体造成性能下降。那么,看来这是个好方法吗?


问题答案:

递归数据结构通常很难“映射”到SQL查询。一些数据库对此有特殊的支持(例如,Oracle),但是MySQL没有内置的支持(=您可以解决该问题,但是它很笨拙)。

我们的应用程序需要类似的东西。我们的解决方案是在一个简单的表中存储规范化的数据(即“用户X在节点Z上具有权限Y”->具有FK关系的三列)。

DAO /管理器对象读取此表并建立一个缓存,在其中可以根据需要快速查找权限。

总结:使数据库保持简单,并在应用程序中编写特殊的帮助程序代码,以将数据库转换为所需的结构。



 类似资料:
  • 问题内容: 我正在尝试在GORM中定义树结构。这是我的模型: 插入似乎可以正常工作,但是当我无法加载具有多个级别和子级别的Tree时。我想我在关系中错过了一些东西:-树应该引用rootLevel(以及可选地引用所有子级别)-一个级别应该引用其父级别,其子级别和全局父树 您能指出我正确的方向以获得这样的树结构吗?谢谢 问题答案: 我最终得到了这个解决方案(感谢朋友): 和 我错过了Tree和Leve

  • 本文向大家介绍数据结构中的R *树,包括了数据结构中的R *树的使用技巧和注意事项,需要的朋友参考一下 基本概念 在数据处理的情况下,R *树被定义为为索引空间信息而实现的R树的变体。 R *树比标准R树的建造成本稍高,因为可能需要重新插入数据。但是生成的树通常具有更好的查询性能。与标准R树相同,它可以存储点和空间数据。R *树的概念由Norbert Beckmann,Hans-Peter Kri

  • 主要内容:一个 XML 文档实例,XML 文档形成一种树结构,实例:,XML 文档实例XML 文档形成了一种树结构,它从"根部"开始,然后扩展到"枝叶"。 一个 XML 文档实例 XML 文档使用简单的具有自我描述性的语法: <?xml version="1.0" encoding="UTF-8"?> <note> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me th

  • 主要内容:树的结点,子树和空树,结点的度和层次,有序树和无序树,森林,树的表示方法,总结之前介绍的所有的 数据结构都是 线性存储结构。本章所介绍的树结构是一种非线性存储结构,存储的是具有“一对多”关系的数据元素的集合。                                                                          (A)                                                          

  • NowCoder 题目描述 解题思路 // java public boolean HasSubtree(TreeNode root1, TreeNode root2) { if (root1 == null || root2 == null) return false; return isSubtreeWithRoot(root1, root2) || HasSu

  • 本文向大家介绍数据结构中的四叉树,包括了数据结构中的四叉树的使用技巧和注意事项,需要的朋友参考一下 四叉树是被实现以有效地存储二维空间上的点的数据的树。在此树中,每个节点最多具有四个子节点。 我们可以从二维区域构建四叉树,实现以下步骤 当前的二维空间分为四个框。 如果盒子中包含一个或多个点,则构建一个子对象,在其中存储盒子的二维空间。 如果一个盒子不包含任何点,则不要为其建立子对象。 对每个孩子执