我有一个表示层次结构的数据结构。
权限存储在一个平面表中:
| pKey | type | bitperms |
执行搜索等全局操作时,我们需要在树中递归检查权限。
使用树结构的各个叶子内联检查权限很容易。但是,在节点上考虑权限需要两种已知方法之一:
提前计算所有根(授予权限的节点)并在获取树叶时将其用作查询过滤器
是否存在以更有效的方式执行此操作的任何算法?也许重新组织权限数据或向层次结构添加更多信息?
或许可以添加一些启发式来处理极端事件?
答案 0 :(得分:3)
Dunno关于这方面的完整论文,但这是我的想法。
然后,我会从root用户预先计算文件夹的所有权限,并在文件夹的某些权限更改(或添加角色等)时将它们与文件夹节点一起保存。调用特定文件/叶时,您只需检查文件/叶子权限及其文件夹权限。
您还可以将某些文件夹标记为“不要从父级继承权限”,这可能会在根权限更改时缩短您的计算...
这会使以下操作变得便宜:
这些操作费用很高,但由于它们不需要处理任何叶子/文件,因此只需要触摸整个树的一小部分: