在具有多个用户的php / mysql应用程序中实现文件夹共享

时间:2012-05-09 12:37:34

标签: php mysql

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

USER_TABLE:

user_id(PK), name, password, etc

folder_table

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

document_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. 用户至少应该能够与其他用户或群组共享文件夹(I 将根据需要添加组的概念)
  3. SQL语句的WHERE不应该有太多的开销 条款与现在的条款相反(简单如:WHERE user_id = %d

1 个答案:

答案 0 :(得分:2)

与用户共享文件夹

您可以使用列folder_id(FK), user_id (FK)

添加表* folder_user *

* 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)以授予组访问权限。