Страница 1 из 1

Права доступа при отдаче загруженных файлов

Добавлено: 2016.01.26, 13:38
fly2k
Добрый день!

Есть пользователи, они могут создавать статьи, в которых могут использоваться загруженные картинки. При этом у статьи есть настройки доступа: кто-то может её смотреть, а кто-то - нет. Для модели статьи с правами доступа всё понятно. Но вот с загруженными файлами - не очень. В простом варианте, загруженные файлы просто лежат в какой то папке, доступной напрямую по хттп. Таким образом, скажем если есть статья которая закрыта для просмотра, картинки используемые в ней всё равно будут доступны по прямому урлу(если его знать).

Я пока вижу такие варианты:

1) Убрать файлы из веба и отдавать их через контроллер, в котором проверять всё необходимое.
1.1) Файлы так же на ФС, но отдавать их с помощью, например, readfile.
1.2) Хранить содержимое файлов вообще в БД - оттуда и отдавать.

2) Что-то изобретать с настройками веб-сервера (у меня апач), "научить" его обращаться к приложению для проверки прав, такое вообще бывает?

Какие еще варианты? Особенно интересует производительность. Например, про вариант файлов в БД слышал, что кеш мускула ими просто забъется.

Научите как грамотно это сделать?

Спасибо!

Re: Права доступа при отдаче загруженных файлов

Добавлено: 2016.01.26, 13:41
zelenin
1.1, только проверить производительность на больших файлах.

Re: Права доступа при отдаче загруженных файлов

Добавлено: 2016.01.26, 13:42
rugabarbo
Статьи хранить в БД.
Про файлы zelenin ответил.

Re: Права доступа при отдаче загруженных файлов

Добавлено: 2016.01.26, 13:51
rugabarbo
Если хочется изучить грамотную реализацию хранения файлов в БД, рекомендую Phabricator (разрабатывается крутыми ребятами из Facebook): http://phabricator.org

Я на своих инстансах фабрикатора храню файлы в БД. Задаётся конфой: https://secure.phabricator.com/book/pha ... e_storage/
(cм.секцию Storage Engine)

Кстати, в этом же мане у них хорошо расписаны плюсы и минусы всех подходов к хранению.

Бонус в крутости бэкапов: не приходится бэкапить отдельно файлы и отдельно БД.
Бэкапится только БД.

Начать раскопки реализации можно отсюда: https://github.com/phacility/phabricato ... Engine.php

Re: Права доступа при отдаче загруженных файлов

Добавлено: 2016.01.26, 13:58
lynicidn
1 и 1.1. (что по сути одно и тоже) только я рекомендовал бы не readfile, https://github.com/yiisoft/yii2/blob/50 ... e.php#L432

и рбак где по имени найдется картинка, потом вытащится ее пост и проверится пост на доступ

Re: Права доступа при отдаче загруженных файлов

Добавлено: 2016.01.26, 14:53
zelenin
rugabarbo писал(а):Если хочется изучить грамотную реализацию хранения файлов в БД, рекомендую Phabricator (разрабатывается крутыми ребятами из Facebook): http://phabricator.org

Я на своих инстансах фабрикатора храню файлы в БД. Задаётся конфой: https://secure.phabricator.com/book/pha ... e_storage/
(cм.секцию Storage Engine)

Кстати, в этом же мане у них хорошо расписаны плюсы и минусы всех подходов к хранению.

Бонус в крутости бэкапов: не приходится бэкапить отдельно файлы и отдельно БД.
Бэкапится только БД.

Начать раскопки реализации можно отсюда: https://github.com/phacility/phabricato ... Engine.php
ну это о доп. абстракции над хранением, реализуемой например https://github.com/thephpleague/flysystem
больше ничего не вижу, что можно там подчерпнуть

Re: Права доступа при отдаче загруженных файлов

Добавлено: 2016.01.26, 14:56
lynicidn
рекомендую https://github.com/yii2tech/file-storage

апд. хотя creocoder написал и для fly и она побольше имеет провайдеров, на счет бакетов (которые удобны) не скажу

Re: Права доступа при отдаче загруженных файлов

Добавлено: 2016.01.26, 14:59
zelenin
lynicidn писал(а):рекомендую https://github.com/yii2tech/file-storage
кажется, flysystem более популярен, чем частное поделие, что даст уже готовые адаптеры к стораджам, которые не идут из коробки. К тому же есть хорошая интеграция под yii2. Но смысл и там и там одинаков.
UPD ты уже написал)

Re: Права доступа при отдаче загруженных файлов

Добавлено: 2016.01.27, 11:37
fly2k
Огромное спасибо за ответы!

Пробую flysystem(враппер от creocoder). Правильно ли я понял что там нет возможности дописать в файл не получая текущее содержимое файла?