java - 基于用户和组的文件夹权限

标签 java sql mysql algorithm permissions

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

如果我必须在单独的表中为每个文件夹查找权限,这可能会变得很昂贵(我同意,因为层次结构,我们可以隐藏隐藏文件夹节点的所有子节点,这样它们就可以打折).

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

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

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

最佳答案

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

你可以:

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

为您提供快速遍历,但初始开销较高(取决于您的应用程序,这可能不会引起注意)

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

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

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

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

alt text

关于java - 基于用户和组的文件夹权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3217182/

相关文章:

java - 类字段上的 @JsonProperty - 获取 JSON 中的重复字段

java - n-body Simulation 预期性能 barnes hut

php - 使用 SQL 选择查询的结果来更新表

php - 如何仅显示与另一个表中的值匹配的行

java - JVM 最大堆大小 := 0 - what does this mean?

java - 运行服务器瓶颈测试

mysql - 如何计算年份及其值(value)?

sql - SSIS 和外键

MySQL:当每个日期有多个值时,MAX(日期)

mysql : match against and having query with max