Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Мандатный доступ к изображения средствами php
Покинул форум
Сообщений всего: 4
Дата рег-ции: Авг. 2011
Помог: 0 раз(а)
Добрый день господа, задача такая:
Есть пользователи которые могут загружать изображения на сервер, которые в последствии будут использованы и удалены.
— Пользователь авторизуется
— Пользователь загружается свои изображения становясь их владельцем (условно).
— Владелец должен иметь доступ к своим изображениям до момента их использования и удаления.
— Пользователь имеет доступ только к тем изображениям, которые принадлежат ему и ни чьим другим.
— Не авторизованные системой пользователи вообще не имеют доступа к изображениям.
Вопрос в том как реализовать эту задачу средствами php на стороне сервера.
Хранить изображения выше webroot можно, но как их потом отдавать конкретным пользователям для удобной работы(редактирования например) ?
Хотелось бы увидеть хорошую схему для решения этой задачи или готовый пример.
mshdn
Отправлено: 23 Августа, 2011 - 21:20:16
Гость
Покинул форум
Сообщений всего: 90
Дата рег-ции: Окт. 2008
Помог: 0 раз(а)
Не очень понятна проблема - любая галерея хранит т файлы-картинки на сервере, причем в произвольной папке своего домена. Организуется
таблица базы данных юзеров
таблица файлов-имен.
Доступ юзера к своим фото после авторизации через запрос к таблице файлов с фильтром по id юзера. Каждый видит только свои фото.
energ
Отправлено: 23 Августа, 2011 - 21:57:46
Гость
Покинул форум
Сообщений всего: 102
Дата рег-ции: Окт. 2010
Помог: 0 раз(а)
а чем причина эта обычная система соц сети я например реализовывал подобное так для каждого нового пользователя создаеться папка с его id в базе в ней все его параметы, настройки, файлы и соотвецтвенно фото, на каждого авторизованого пользователя вешаеться кука в которой указываеться его id (можно в зашифрованом виде), далее посредствам основного скрипта выдаеться та папка к которой пользователь принадлежит а точнее его Id Ну вот и все в целом, ты делаешь возможным редактирование только данный в своей папке и если нужно даше возможность только смотреть фотки или файлы других пользователей
illy
Отправлено: 23 Августа, 2011 - 22:05:32
Участник
Покинул форум
Сообщений всего: 1117
Дата рег-ции: Июль 2011 Откуда: от верблюда)
Помог: 28 раз(а)
Да. Всё гениальное просто
----- Всё гениальное - просто
И ещё проще, если ты - индиго
shearin
Отправлено: 14 Сентября, 2011 - 18:00:54
Новичок
Покинул форум
Сообщений всего: 4
Дата рег-ции: Авг. 2011
Помог: 0 раз(а)
[quote=energ][/quote]
В вашем случае я так понимаю получив ссылку, любой может по ней посмотреть фотографии. Ну или найти перебором их, я правильно понимаю?
Если есть, то хотелось бы ссылки на конкретные примеры и описания систем.
Viper
Отправлено: 15 Сентября, 2011 - 07:15:21
Активный участник
Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007 Откуда: Симферополь
Помог: 98 раз(а)
shearin пишет:
В вашем случае я так понимаю получив ссылку, любой может по ней посмотреть фотографии. Ну или найти перебором их, я правильно понимаю?
правильно. Но для этого вы можете проверить права доступа юзера к изображению/папке и всех левых откидывать.
По теме: есть много вариантов как можно все это реализовать, можно даже файлы в базе хранить.
Или вы боитесь что кто-то сможет посмотреть прямую ссылку на фото? Ну так сделайте папку-хеш, название фотки-хеш и угадать уже будет трудно. Только прямая ссылка сможет спасти, но и тут можно смотреть на реферера и отсеивать тех, кто пришел не со своего домена..
Короче способов много!
shearin
Отправлено: 15 Сентября, 2011 - 17:27:29
Новичок
Покинул форум
Сообщений всего: 4
Дата рег-ции: Авг. 2011
Помог: 0 раз(а)
Viper пишет:
правильно. Но для этого вы можете проверить права доступа юзера к изображению/папке и всех левых откидывать.
Ну я так понимаю, чтобы организовать проверку прав пользователя с последующей выдачей картинки, нужно иметь скрипт которые будет производить readfile("картинка выше www root") и отдавать её меняя http заголовок. Или есть варианты? И не будет ли слишком накладко использовать readfile ?
Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008 Откуда: Москваль
Помог: 52 раз(а)
если вы не хотите выдавать картинку по прямой ссылке и при этом не хотите отдавать их через php-скрипт (что логично). В nginx, например, можно настроить поведение в зависимости от куки. Например, если нет куки или она не соответствует какому-то правилу - показать 404. Читайте, думайте (каким алгоритмом можно в куке показать, к чему есть доступ, а к чему нет) и все у вас получится
ps
Если картинок не много - вполне можно и с помощью скрипта его отдавать, если же их много - лучше погуглите и разберитесь с настройками nginx
shearin
Отправлено: 17 Сентября, 2011 - 21:44:27
Новичок
Покинул форум
Сообщений всего: 4
Дата рег-ции: Авг. 2011
Помог: 0 раз(а)
Stierus пишет:
если вы не хотите выдавать картинку по прямой ссылке и при этом не хотите отдавать их через php-скрипт (что логично). В nginx, например, можно настроить поведение в зависимости от куки. Например, если нет куки или она не соответствует какому-то правилу - показать 404. Читайте, думайте (каким алгоритмом можно в куке показать, к чему есть доступ, а к чему нет) и все у вас получится
ps
Если картинок не много - вполне можно и с помощью скрипта его отдавать, если же их много - лучше погуглите и разберитесь с настройками nginx
О, то что нужно Благодарю
caballero
Отправлено: 17 Сентября, 2011 - 22:27:12
Активный участник
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011 Откуда: Харьков
Помог: 126 раз(а)
То что нужно - это хранить картинки в базе данных и отдавать скриптом. Все вопросы решаются автоматически. Так делает например SharePoint Server
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
caballero пишет:
это хранить картинки в базе данных
сам бинарник? блобом?!
----- PostgreSQL DBA
caballero
Отправлено: 17 Сентября, 2011 - 22:43:09
Активный участник
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011 Откуда: Харьков
Помог: 126 раз(а)
Цитата:
сам бинарник? блобом?!
разумеется, сам так делаю для картинок типа галерей и прочего
решаются все вопросы с доступом, с синхронизацией данных БД и самих файлов и т.д.
Делается отдельная таблица для блобов один к одному с описанием файло и все дела.
Кстати БД гораздо бсчтрее ворочает файлами чем файловая системма
единстенный минус - грузит проц когда скриптом отдает
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
Ох, какой кошмар. Бедная СУБД.
caballero пишет:
Кстати БД гораздо бсчтрее ворочает файлами чем файловая системма
Ну-ну. Как будто база свои данные хранит где-то в астрале.
Для пары последовательных бинарно идентичных запросов - естественно чтение из памяти быстрее чтения с априори медленного накопителя, т.к. подпадает под кэш субд.
В общем, удачи вам встретить нагруженный проект.
----- PostgreSQL DBA
caballero
Отправлено: 17 Сентября, 2011 - 23:13:58
Активный участник
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011 Откуда: Харьков
Помог: 126 раз(а)
Вы думаете файловая системма быстрее найдет файл среди тысяч?
БД в отличие от файловой системмы оптимизорована для быстрого поиска и выдачи данных
Кроме того блобы будут хранится в отдельной таблице а значит никаким каком грузить СУБД не будут пока не будет запрошен собственно файл. А большой файл по любому будет долго передаватся по HTTP. Так что юзер по любому будет смотреть на крутилку пока файл грузится
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.