嘿我正在处理文件夹树,需要能够根据用户及其所属的组限制某些文件夹的可见性。我已经有了树中所有文件夹和文件夹层次结构的数据库表示。 我现在的问题是如何最好地代表权限。
如果我必须在一个单独的表中查找每个文件夹的权限,这可能会变得昂贵(我认为由于层次结构,我们可以隐藏隐藏文件夹节点的所有子项,以便它们可以打折)。
有没有人会有更好的模型和算法来改善它?我认为unix文件系统已经有一段时间了,所以必须有一些关于如何模拟这个问题的非常好的想法。
请注意,在我正在处理的模型中,没有该文件夹的“所有者”。根据具体情况,文件夹可以对用户可见。
我正在使用Java和Mysql btw
答案 0 :(得分:3)
我想这取决于您的系统将如何使用,特别是用户数量和数量。文件夹。
你可以:
每次用户“登录”时,为您提供快速遍历,初始开销较高(取决于您的应用程序可能无法显示)
删除任何初始开销,对于没有更改文件夹的用户,没有性能成本
至于表示权限,您可能希望查看how the NTFS permission model works,您可以授予或撤消权限,并将它们设置为是否继承。这可能是您可以获得的最复杂的,如果您可以简化以不处理撤销的权限并且始终继承您只需要从上到下遍历文件夹层次结构,直到您找到授予或终止。根据您允许用户浏览结构的方式,您可以很好地简化此操作,只需列出用户可以看到的当前文件夹下的节点,因为他们必须已经隐式地能够看到当前文件夹。
架构明智,你在文件夹和文件夹之间有多对多的关系。 user / group(您可以将模型用户和组视为单个实体),您的权限对象可以是简单的布尔值,也可以是更复杂的对象,具体取决于您要支持的权限类型。我根据你的模型的复杂程度,使用isValid
方法之一设置了这样的东西。
答案 1 :(得分:1)
在基本层面上,最好的办法就是用你的第一直觉来创建一个查找表,根据文件夹的唯一ID创建权限。
然后基准。
如果它太依赖资源,您可以将权限包含在核心数据库中作为文件夹表示的一部分。
但是先让它工作,然后在性能损失过高的情况下解决问题。
答案 2 :(得分:1)
要考虑的一件事:改变权限是一项罕见的操作,检查组的权限也是如此,而检查单个用户的权限非常常见(每次用户访问文件夹时)。因此,编写算法的最佳方法是将速度偏向于检查来自用户/文件夹的映射,以及更改权限更改。