i具有代表层次结构的数据结构。
- 文件夹
- 文件夹
- 文件夹
- 文件
- 文件
- 等。
- 文件夹
权限存储在平桌上:
| pKey | type | bitperms |
执行诸如搜索之类的全局操作时,我们需要在树中递归检查权限。
与树结构的各个叶子一起检查权限很容易。但是,在节点上征得许可,需要两种已知方法之一:
- 取出过滤后的叶子后,处理每个人以检查其父母的perms
- 成本延迟到 之后
- 可能发现了很多初始叶子,但是在处理父母之后,没有什么可以导致无用的工作
预先计算所有根(授予权限的节点),并在获得叶子时用作查询过滤器
- 如果存在许多根,则可能是一个巨大的查询
以更有效的方式执行此操作是否存在任何算法?也许重组权限数据或在层次结构中添加更多信息?
也许添加了一些启发式方法来处理极端?
dunno关于一份完整的论文,但这是我的想法。
- 您显然需要在某个时候检查从叶到根的整个路径。
- 我假设没有侧面的权限规则简介(即您在树上工作,而不是一般图)。
- 我假设几个"文件夹"节点上有很多叶子。
- 我还假设您有一种包含权限(Oring thitmask)或排除它们的方法(在BitMask上进行宣传)。
- 权限主要授予角色/组,而不是单个用户(在后一种情况下,您需要创建S.Th。
- 权限不会爬上树,而只能到叶子。
然后,我将在"根"文件夹上的所有权限上进行预测,并在文件夹上的某些权限更改(或添加角色等)时将其与文件夹节点一起保存。当调用特定的文件/叶子时,您只需要检查文件/叶的权限及其文件夹权限。
您还可以将某些文件夹标记为"不继承父母的权限",当根部权限更改时,可能会缩短您的计算...
这将使以下操作变得便宜:
- 检查叶子的权限(加入叶子及其父母权限)。
- 更改不包含更多文件夹的文件夹的权限。
这些操作是昂贵的,但是由于它们不需要在任何叶子/文件上工作,因此它们只需要触摸整棵树的次要部分:
- 更改/扩展权限模型(例如,通过添加角色/群体,它可能会根据您的实现来扩展您的位掩模)。
- 更改根部权限。