algorithm - 执行分层权限检查的算法是否存在?

标签 algorithm permissions computer-science computer-algebra-systems

我有一个代表层次结构的数据结构。

  • 文件夹
    • 文件夹
      • 文件夹
      • 文件
    • 文件
    • 等等

权限存储在一个平面表中:

| pKey | type | bitperms |

在执行搜索等全局操作时,我们需要在树中递归地检查权限。

检查与树结构的各个叶子内联的权限很容易。然而,考虑节点的权限需要两种已知方法之一:

  • 获取过滤后的叶子后,对每个叶子进行后处理以检查它的父权限
    • 成本推迟到之后
    • 可能会找到很多初始叶,但在处理完父节点后,什么都没有留下,导致完成了无用的工作
  • 提前计算所有根(授予权限的节点)并在获取叶子时将其用作查询过滤器

    • 如果存在许多根导致在处理每个叶子上花费过多的时间,则可能是一个巨大的查询

    是否存在任何算法可以更有效地执行此操作?也许重新组织权限数据或向层次结构添加更多信息?

    或许添加一些启发式方法来处理极端情况?

最佳答案

不知道关于这方面的完整论文,但这是我的想法。

  1. 您显然需要在某个时刻检查从叶节点到根节点的整个路径。
  2. 我假设没有从侧面引入许可规则(即您正在处理树,而不是一般图)。
  3. 我假设在几个“文件夹”节点上有很多叶子。
  4. 我还假设您有一种方法来包含权限(在位掩码上进行 ORing)或排除它们(在位掩码上进行 NOTAND)。
  5. 权限主要授予角色/组,而不是个人用户(在后一种情况下,您需要创建诸如该用户的“临时角色/组”之类的东西)。
  6. 权限不会上升到树上,只会下降到叶子。

然后我会预先计算从根目录开始的文件夹的所有权限,并在文件夹的某些权限发生变化(或添加角色等)时将它们与文件夹节点一起保存。调用特定文件/叶子时,您只需检查文件/叶子权限及其文件夹权限。

您还可以将某些文件夹标记为“不从父级继承权限”,这可能会在根权限更改时缩短您的计算...

这将使以下操作变得便宜:

  • 检查叶子的权限(加入叶子及其父权限)。
  • 更改不包含更多文件夹的文件夹的权限。

这些操作代价高昂,但由于它们不需要处理任何叶子/文件,因此它们只需要触及整棵树的一小部分:

  • 更改/扩展权限模型(例如,通过添加角色/组,这可能会扩大您的位掩码,具体取决于您的实现)。
  • 更改根权限。

关于algorithm - 执行分层权限检查的算法是否存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22253349/

相关文章:

java - 算法——求循环缓冲区中数字的平均值?

algorithm - 如何在nlogn时间复杂度下执行任务调度算法?

algorithm - n个对象的等价性测试

algorithm - 什么是电路?

arrays - Hackerrank算法的优化

algorithm - 选择序列中的元素

将字符串转换为 mode_t

jenkins - 禁用构建取消对 Jenkins 中某些用户的权限?

linux - 如何为不同的用户维护不同的编译库?

logic - P暗示Q,英文怎么读