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

时间:2014-03-07 14:51:21

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

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

      • 文件夹
      • 文件
    • 文件

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

| pKey | type | bitperms |

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

使用树结构的各个叶子内联检查权限很容易。但是,在节点上考虑权限需要两种已知方法之一:

  • 取出过滤后的叶子,后处理每一个以检查它的父母烫发
    • 费用延迟到
    • 之后
    • 可能会发现很多初始叶子,但在处理完父母之后,没有任何东西会导致无用的工作。
  • 提前计算所有根(授予权限的节点)并在获取树叶时将其用作查询过滤器

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

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

    或许可以添加一些启发式来处理极端事件?

1 个答案:

答案 0 :(得分:3)

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

  1. 你显然需要在某个时候检查从叶子到根的整个路径。
  2. 我假设没有从侧面引入权限规则(即您正在处理树,而不是一般图表。)
  3. 我在很少的“文件夹”节点上假设很多叶子。
  4. 我还假设您有一种方法可以包含权限(在位掩码上进行ORing)或排除它们(在位掩码上进行NOTAND)。
  5. 权限主要授予角色/组,而非个人用户(在后一种情况下,您需要为该用户创建类似“ad-hoc角色/组”的s.th.)。
  6. 权限不会上升到树上,只会落到树叶上。
  7. 然后,我会从root用户预先计算文件夹的所有权限,并在文件夹的某些权限更改(或添加角色等)时将它们与文件夹节点一起保存。调用特定文件/叶时,您只需检查文件/叶子权限及其文件夹权限。

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

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

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

    这些操作费用很高,但由于它们不需要处理任何叶子/文件,因此只需要触摸整个树的一小部分:

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