Права доступа к папкам для загрузки файлов PHP - частные / публичные / общие представления? - PullRequest
1 голос
/ 09 июля 2011

Я пишу скрипт загрузки php-файла для проекта - я видел все замечательные программы с открытым исходным кодом, но я решил сделать это самостоятельно, так как у меня есть уровень прав доступа пользователя, который я не могу кажется, найти где угодно.

Вот что я пытаюсь сделать:

  1. Нормальная область загрузки файлов, точно так же как elFinder
  2. Какой-то способ ограничить определенных пользователей просмотром папок и / или файлов в зависимости от того, к какой группе они принадлежат. Я должен сделать это, так как это для организации, в которой я работаю, где определенные пользователи могут видеть только те документы, которые они должны

Первоначально я решил создать решение для mysql, в котором каждая папка имеет идентификатор, и когда вы создаете папку, вы указываете группы, которым разрешено просматривать эту папку - но это не кажется самым элегантным решением.

Может кто-нибудь предложить теоретический способ сделать это? Я рад, что все это написано на PHP, но просто не могу понять, как это сделать.

Есть ли какой-то способ (если не называть папки определенным образом), чтобы папки и файлы имели свойства, которые я могу использовать здесь?

Ответы [ 2 ]

2 голосов
/ 09 июля 2011

Поскольку у вас есть строгие требования к разрешениям, вы можете реализовать структуру, аналогичную гранулярному подходу UNIX к разрешениям для файлов.Каждый файл или папка должны иметь владельца, группу и строку разрешений, которая выглядит как «755».

Первая позиция строки разрешений относится к владельцу файла или каталога.Число 4 обозначает привилегии чтения, 2 обозначает привилегии записи, а 1 обозначает привилегии выполнения.Разрешение является кумулятивным, поэтому разрешение 7 в первом столбце (4 + 2 + 1) означает, что владелец имеет права на чтение, запись и выполнение.

Второй столбец относится к группе.В этом случае члены группы могут читать (4) и выполнять (1) (4 + 1 = 5).

Третий столбец относится ко всем, кто не является владельцем или членом группы.Эта позиция известна как «мир» или «другой».В этом примере «другие» пользователи также имеют разрешения на чтение (4) и выполнение (1).

После создания столбцов владельца, группы и разрешений для каждого файла / каталога вам потребуется создать «группы»'table и таблица для сопоставления пользователей с группами (' user_groups ').Затем назначьте каждого пользователя одной или нескольким группам и назначьте права доступа владельца, группы и «другие» для каждой папки (и файла, если необходимо).

Для получения дополнительной информации о файловых системах Unix см. thisучебник .

1 голос
/ 09 июля 2011

Как насчет установки каких-то базовых Unix-подобных разрешений для каждого файла.Я предполагаю, что когда пользователь загружает файлы, они сохраняются в базе данных, а не просто загружаются в папку и позволяют людям напрямую перейти к ней для загрузки.Добавьте следующие таблицы базы данных:

  • Пользователи - Каждый пользователь получает одну запись и имеет идентификатор_пользователя, а также информацию для аутентификации пользователя с помощью пароля, полного имени, адреса электронной почты и т. Д..
  • Groups - содержит два столбца group_id и group_name
  • UserGroups - содержит два столбца user_id и group_id.Чтобы добавить пользователя в группу, просто добавьте его user_id и соответствующий group_id в качестве записи в эту таблицу.
  • Files - содержит всю имеющуюся информацию о файле плюс группу (которая будет группой, которой разрешен доступ к файлам), разрешением группы и другим разрешением.Последние два будут касаться того, есть ли у группы доступ к просмотру файла и есть ли у каждого разрешение на его доступ соответственно.

Тогда каждый пользователь может быть добавлен в любую указанную вами группу и, следовательно, будет иметьразрешения на доступ к файлам соответственно.Вы также можете сделать так, чтобы никто не мог видеть файлы, установив права доступа группы к 0.

...