Есть личный кабинет с доступом для зарегистрированных пользователей на каталоги с файлами. Реализовано через FileLister. Т.е. все пользователи, зайдя в личный кабинет, видят файлы из указанного каталога. Но необходимо сделать персональный доступ к именно файлам. 1 пользователь — 1 файл, чтобы он не видел файлы других пользователей. Подскажите, пожалуйста, как можно сделать?
Можно сделать скрипт который на основе авторизации будет отдавать файл с контентом, а если прав не хватает, то отдавать пустой файл. Там вариаций много можно использовать не много файлов а например их идентификаторы и один скрипт, как например: script.php?file=key_for_file, можно создавать файлы с ключами внутри. Ну а права реализовывать на основе БД.
P.S. можно попробовать реализовать на основе unix прав, но там будет слишком тесная интеграция с системой, для общественного сайта мне кажется так делать не стоит.
Не в курсе как работает Ваш FileLister, но…
Для каждого пользователя создавать папку не вариант?
Берем md5(userid) и создаем 3х уровневую папку. В FileLister передаем адрес этой папки.
Права реализовать думаю не составит проблем.
Это конечно если подстраивать под вас.
Лучшим вариантом будет хранить файлы как вам удобно, а выдавать только в зависимости от авторизации.
Да можно просто хранить все файлы, как обычно — в двух-трехуровневой куче, а в БД с виртуальными путями хранить еще и права доступа. Просто помимо проверки на существование реального файла по виртуальному пути нужно будет еще и права доступа проверить.
А ваш метод учитывает возможность обращения по прямой ссылке?
С этим не вижу каких либо проблем. Вариантов очень много.
1. Оставить все как предложил и отдавать ссылки прямо на стораж где храним файлы.
— другие пользователи смогут получить доступ к чужому файлу если папку называть только по шифрованому ид пользователя. Придумать уникальный и не подбираемый вариант думаю не составит труда.
2. Проверять кукисы авторизации при скачивании (nginx, apache).
3. Проверять скриптом и отдавать файл через x-accel-redirect.
Любой более-менее нормальный программист сделает это Вам за мин 30-час.
А если пользователи будут работать за одним компьютером и в кэше сохранится путь к файлу, да и мало ли ссылку один другому скинет — что воспрепятствует просмотру и скачиванию файла?
> А ваш метод учитывает возможность обращения по прямой ссылке?
Естественно (только куки нужно будет высылать): для пользователя и будет казаться, что он обращается к файлам «напрямую».
При желании много чего можно сделать при помощи rewrite-rules.
> А если пользователи будут работать за одним компьютером и в кэше сохранится путь к файлу, да и мало ли ссылку один другому скинет — что воспрепятствует просмотру и скачиванию файла?
А куки он откуда возьмет? Да и даже если куки возьмет, а данные сессии в вашей БД уже будут удалены, то ничего не выйдет!
Ну, а «на всякий случай» лучше в хэш идентификатора сессии впихивать еще и UA или хотя бы IP пользователя.
P.S. Я когда-то давно «на коленке» нарисовал по-быстренькому простейший «файл-менеджер». Хотел сделать более приличную штуку (т.е. добавить БД для псевдоФС), но лень-матушка… А на сосфорже этот мой огрызок валяется.
Я думала, что для каждого пользователя (в нашем случае это клиенты) делать свой ресурс, но это с ума сойти сколько работы. Наверное, есть проще вариант.
Это пока на этапе планирования, на данный момент без реализации я вижу такое решение, когда подойду ближе к исполнению плана, вероятнее всего будут изменения в логике хранения и отображения пользовательских данных.