0

我有一个 php/mysql 应用程序。有些用户拥有文件夹。文件夹只能是一层深。每个文件夹可以有无限数量的文档。相关表格如下:

用户表:

user_id(PK), name, password, etc

文件夹表

folder_id(PK), name, user_id(FK into user_table)

文档表

document_id(PK), user_id(FK), folder_id(FK), date, name, etc

对文件夹和文档进行操作的所有查询均采用以下形式

select/update/insert <blah, blah, bhah>
where user_id = %d

现在,我希望允许用户与其他用户共享他们的文件夹。我想以破坏性最小的方式做到这一点。我还想最小化生成的 WHERE 子句的运行时间开销。

我一直在绞尽脑汁并在谷歌上搜索,但还没有找到一个足够简单的解决方案。我可以考虑以类似于 unix 的(读取、写入、执行)以及(所有者、组、其他)机制的方式来实现它。但对于我简陋的系统来说,这似乎有点太复杂了。

如果有人能给我指点我可能采取的方法,我将不胜感激。我的目标很简单:

  1. 该系统不需要大量的返工
  2. 至少用户应该能够与其他用户或组共享文件夹(如果需要,我将添加组的概念)
  3. 与现在相比,SQL 语句的 WHERE 子句不应该有太多开销(就像:WHERE user_id = %d
4

1 回答 1

2

与用户共享文件夹

您可以添加带有列的表 *folder_user*folder_id(FK), user_id (FK)

*folder_table* 中的user_id代表文件夹的所有者。当所有者与另一个用户共享此文件夹时,您将 folder_id 和 user_id(与谁共享文件夹)添加到folder_user表中。

稍后,您可以将列添加access (enum 'READ', 'READ_WRITE')到同一个表中,以查看是否允许用户编辑文件夹中的文档。

与群组共享文件夹

  1. 你需要一个表
  2. 然后您需要将用户添加到组中,因此添加一个表 *user_group* :user_id(FK), group_id(FK)
  3. 然后,要将文件夹的访问权限授予组添加表 *folder_group*: folder_id(FK), group_id(FK) 以授予对组的文件夹访问权限。
于 2012-05-09T12:43:08.217 回答