【问题标题】:Folder permissions based on users and groups基于用户和组的文件夹权限
【发布时间】:2011-03-14 03:07:16
【问题描述】:

嘿,我正在处理文件夹树,需要能够根据用户和他们所属的组来限制某些文件夹的可见性。我已经有了树中所有文件夹和文件夹层次结构的数据库表示。 我现在的问题是如何最好地表示权限。

如果我必须在单独的表中为每个文件夹查找权限,这可能会很昂贵(我承认由于层次结构,我们可以隐藏隐藏文件夹节点的所有子节点,以便它们可以打折)。

有没有人有任何好的模型和算法可以让它变得更好?我认为 unix 文件系统已经这样做了一段时间,所以对于如何建模这个问题一定有一些非常好的想法。

请注意,在我处理的模型中,没有文件夹的“所有者”。根据具体情况,用户可以看到文件夹。

顺便说一句,我正在使用 Java 和 Mysql

【问题讨论】:

  • 到目前为止,我最好的想法是修剪 Java 中的数据以保存 Sql 连接和/或缓存我需要的表中的内容。

标签: java sql mysql algorithm permissions


【解决方案1】:

我想这取决于您的系统将如何使用,特别是用户和文件夹的数量。

你可以:

每次用户“登录”时为每个用户构建整个文件夹结构

为您提供快速遍历,具有更高的初始开销(取决于您的应用程序,这可能不明显)

每次用户更改其当前工作文件夹时构建单级文件夹结构

消除任何初始开销,对于不更改文件夹的用户,没有性能成本

关于权限的表示,你可以看看how the NTFS permission model works,你可以授予或撤销权限,并设置它们是否继承。这可能是您能得到的最复杂的情​​况,如果您可以简化为不处理撤销的权限并始终继承,您只需要从上到下遍历文件夹层次结构,直到找到授权或终止。根据您允许用户浏览您的结构的方式,您可以很好地将其简化为仅列出用户可以看到的当前文件夹下的节点,因为他们必须已经隐式能够看到当前文件夹。

在架构方面,您在文件夹和用户/组之间存在多对多关系(如果您希望将用户和组建模为一个实体),您的权限对象可以是简单的布尔值,也可以是更复杂的对象取决于您想要支持的权限类型。我会设置这样的东西,使用 isValid 方法之一,具体取决于您的模型的复杂程度。

【讨论】:

    【解决方案2】:

    在基本层面上,最好的做法是根据您的第一直觉,针对文件夹的唯一 ID 创建权限查找表。

    然后进行基准测试。

    如果它过于依赖资源,您可以将权限作为文件夹表示的一部分包含在您的核心数据库中。

    但先让它工作,然后再解决性能损失是否太高。

    【讨论】:

    • 性能成本对我来说太高了,无法仅使用查找表。我可以将它作为文件夹表示的一部分包含在内,但我不想再添加三列来跟踪文件夹是否对组、用户和所有用户隐藏。
    • 那就不要了。再添加一列,并将该信息聚合到一个校验和中。
    • 另外,我假设您的意思是“该文件夹授予'仅其组'、'仅其创建者'或'所有用户'的访问权限”。否则,您必须逐个用户授予权限,我不确定这是否会很好地扩展。
    • 如果您想了解 Unix 如何处理将权限合并为一个易于检查的数字的示例:{zzee.com/solutions/…}
    • 除了那个权限列,他还需要保存每个文件夹的用户和组。所以我认为他用三列表示用户(所有者)、组和权限。
    【解决方案3】:

    需要考虑的一点:更改权限是一种罕见的操作,检查组的权限也是如此,而检查单个用户的权限非常普遍(每次用户访问文件夹时)。因此,编写算法的最佳方式是将速度偏向于检查来自用户/文件夹的映射,并防止权限更改。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-28
      • 2015-05-15
      • 1970-01-01
      • 1970-01-01
      • 2023-04-06
      • 1970-01-01
      相关资源
      最近更新 更多