PHP文件上传的文件夹权限 - 私人/公共/共享视图?

时间:2011-07-08 20:38:30

标签: php file-upload permissions

我正在为一个项目编写一个php文件上传脚本 - 我已经看到了所有优秀的开源脚本,但是我决定自己做,因为我有一定​​程度的用户访问权限,我不能似乎找到了任何地方。

所以这就是我要做的事情:

  1. 普通文件上传区域,与elFinder
  2. 完全相同
  3. 某些限制某些用户查看文件夹和/或文件的方法,具体取决于他们所属的组。我需要这样做,因为这是我工作的组织,某些用户只能看到他们应该的文档
  4. 最初我决定制作一个mysql解决方案,其中每个文件夹都有一个ID,当你创建一个文件夹时,你指定了允许查看该文件夹的组 - 但这似乎不是最优雅的解决方案。

    有人能提出理论上的方法来做到这一点吗?我很高兴用PHP编写代码,但我无法理解最好的方法。

    是否有某种方式(缺少以特定方式命名文件夹),文件夹和文件是否具有我可以在此处利用的属性?

2 个答案:

答案 0 :(得分:2)

由于您具有严格的权限要求,因此可以实现类似于UNIX的文件权限的精细方法的结构。每个文件或文件夹都应具有所有者,组和权限字符串,其类似于“755”。

权限字符串的第一个位置属于文件或目录的所有者。数字4表示读取权限,2表示写入权限,1表示执行权限。权限是累积的,因此第一列(4 + 2 + 1)中的权限7表示所有者具有读取,写入和执行权限。

第二栏属于该组。在这种情况下,组成员可以读取(4)并执行(1)(4 + 1 = 5)。

第三栏适用于非集团所有者或成员的每个人。这个位置被称为“世界”或“其他”。在此示例中,“其他”用户还具有read(4)和execute(1)权限。

在为每个文件/目录创建所有者,组和权限列之后,您需要创建一个“组”表和一个用于将用户映射到组('user_groups')的表。然后将每个用户分配给一个或多个组,并为每个文件夹(以及文件,如果需要)分配所有者,组和“其他”权限。

有关Unix文件系统的更多信息,请参阅this tutorial

答案 1 :(得分:1)

如何在每个文件上设置某种类似unix的基本权限。我假设当用户上传文件时,他们将文件存储在数据库中,而不是只是自由上传到文件夹,让人们直接导航到它下载。添加以下数据库表:

  • 用户 - 每个用户都会获得一个条目并拥有user_id以及使用密码,全名,电子邮件等对用户进行身份验证的信息。
  • 群组 - 包含两列group_id和group_name
  • UserGroups - 包含两列,user_id和group_id。要将用户添加到组,只需将其user_id和相应的group_id添加为此表的条目。
  • 文件 - 包含文件中的所有信息以及一个组(允许访问文件的组),组权限和其他权限。最后两个将是该组是否有权查看该文件以及每个人是否都有权访问该文件。

然后,每个用户都可以添加到您指定的任何组中,因此具有相应访问文件的权限。您也可以通过将组权限设置为0来使任何人都无法查看文件。