Как отдавать файлы только пользователю, имеющему на них права?

tp

Guest
Как отдавать файлы только пользователю, имеющему на них права?

Ситуация такая:
Файлы загружаются в папку, которая недоступна извне.
Как отдать эти файлы, оптимизировав процесс?
Точнее пользователь авторизуется - у него появляются права на определенные файлы (на виртуальную папку, которая к реальному хранению на сервере отношения не имеет).

Мне приходят в голову 2 варианта: отдавать через скрипт fread или делать symlink и давать ссылку на нее.
Второй вариант мне кажется менее ресурсоемкий.

Но тут следующая проблема: если хранить ссылку постоянно, то ее можно использовать как обычную ссылку, т.е. Вася Пупкин, у которого были права может поместить ее где угодно и она будет играть роль обычной ссылки.
Если каждый раз создавать ссылку "на лету" после авторизации и, например, убивать ее по крону, то будет лишняя нагрузка на сервер.

Еще мб такое: создаем реальную папку с id виртуальной папки, кидаем туда симлинки и они там хранятся, но тогда надо защитить эту папку, получается защищаем неизвестным никому паролем, потом после успешной авторизации скрипт сам посылает этот пароль ($PHP_AUTH_USER и $PHP_AUTH_PW) и пользователю открывается папка.
Реализуем ли такой вариант, какие у него минусы?

Какие еще возможны здесь варианты?
 

Fiva

Держу ZMH
Почитай про basicHTTP авторизацию - может это то, что как раз тебе нужно
 

tp

Guest
Автор оригинала: Fiva
Почитай про basicHTTP авторизацию - может это то, что как раз тебе нужно
А вот это $PHP_AUTH_USER и $PHP_AUTH_PW - никакого отношения к basic - авторизации не имеет или я что-то непонимаю?
 

Кром

Новичок
tp
А зачем так все усложнять? Что мешает поставить пользователю куку и проверять ее перед тем как делать тот-же симлинк?
 

tp

Guest
Автор оригинала: Кром
А зачем так все усложнять? Что мешает поставить пользователю куку и проверять ее перед тем как делать тот-же симлинк?
Я же писал, что не хотелось бы делать симлинк каждый раз, хотелось бы сделать симлинк один раз при создании или изменении виртуальной папки.
То, что предлагаете вы - тоже вариант, но при этом хоть симлинк не создается каждый раз, но он должен создаваться раз за сессию, во-вторых, если в виртуальную папку зайдет другой пользователь для него надо будет делать еще симлинк.
 

Fiva

Держу ZMH
Автор оригинала: tp
А вот это $PHP_AUTH_USER и $PHP_AUTH_PW - никакого отношения к basic - авторизации не имеет или я что-то непонимаю?
не заметил последний вариант :) он - самый нормальный
 

Кром

Новичок
>Я же писал, что не хотелось бы делать симлинк каждый раз, хотелось бы сделать симлинк один раз...

Нет никаких видимых причин, чтобы "не хотеть делать симлинк каждый раз". Абсолютно.
 

tp

Guest
Автор оригинала: Кром
>Я же писал, что не хотелось бы делать симлинк каждый раз, хотелось бы сделать симлинк один раз...

Нет никаких видимых причин, чтобы "не хотеть делать симлинк каждый раз". Абсолютно.
Причина номер раз: чтобы сделать симлинк нужен пхп, чтобы выдать браузеру ссылку на уже созданный симлинк пхп не нужен, т.е. можно установить 2 апача, один с пхп, другой без пхп и отдавать ссылки через апач без пхп.
Ну и в любом случае на создание симлинка тратятся ресурсы, другой вопрос каковы эти ресурсы - я не знаю, если вы знаете и знаете, что они небольшие - тогда думаю буду так и делать, т.е. создавать симлинки "на лету"
 

Кром

Новичок
>т.е. можно установить 2 апача, один с пхп, другой без пхп и отдавать ссылки через апач без пхп.

И как ты будешь проверять на том сервере, где нет php что за пользователь обращается к файлу?

>если вы знаете и знаете, что они небольшие

Они мизерные.
 

tp

Guest
Автор оригинала: Кром
>если вы знаете и знаете, что они небольшие
Они мизерные.
М.б. они и мизерные, но если сразу к этому файлу будет обращаться 10 человек, то нагрузка думаю будет ощутимой.

А как вам все-таки вариант с созданием физической папки, аналога виртуальной, где лежат все симлинки, и на эту папку ставить пароль и делать basic-авторизацию?
Тогда не надо симлинки создавать постоянно.
 

Кром

Новичок
>но если сразу к этому файлу будет обращаться 10 человек, то нагрузка думаю будет ощутимой.

Я так понимаю, ты понятия не имеешь о серверных нагрузках.

>А как вам все-таки вариант с созданием физической папки, аналога виртуальной, где лежат все симлинки, и на эту папку ставить пароль и делать basic-авторизацию?

Если тебе так легче, сделай так.
 

tp

Guest
Автор оригинала: Кром
>но если сразу к этому файлу будет обращаться 10 человек, то нагрузка думаю будет ощутимой.

Я так понимаю, ты понятия не имеешь о серверных нагрузках.
Только примерное.

Вообще идет обсуждение только моих вариантов, Вы можете предложить какие-то другие, неужели больше нет варинатов?
 

Кром

Новичок
Если ты объяснишь, чем тебе не нравятся те варианты которые мы обсудили, можем поговорить и о других вариантах.
А пока ты похож на капризную барышню, которая купила себе платье, но так ни разу его и не надев, хочет себе новое.
 

tp

Guest
Автор оригинала: Кром
А пока ты похож на капризную барышню, которая купила себе платье, но так ни разу его и не надев, хочет себе новое.
Если рассматривать пример с барышней, то она сначала ходит по магазинам - выбирает, а потом только покупает.
Если у Вас есть еще варианты, опишите их вкратце, если нет - не надо лишнего трепа.
Мне интересен опыт других в данном вопросе.
 

Кром

Новичок
>Если рассматривать пример с барышней, то она сначала ходит по магазинам - выбирает, а потом только покупает.

Это нормальная так поступает. А капризная - все недовольна.

>Если у Вас есть еще варианты, опишите их вкратце

Других вариантов у нас есть. Только смысла о них рассказывать нету. Ты ведь с теми что есть не знаешь что делать.

>если нет - не надо лишнего трепа.

А тут кроме тебя никто не трепится.
 

tp

Guest
Автор оригинала: Кром
Других вариантов у нас есть. Только смысла о них рассказывать нету. Ты ведь с теми что есть не знаешь что делать.
Вот это называется голословный треп (я бы по-другому сказал, но боюсь модераторы потрут).
Если знаешь - приведи варианты, я не прошу расписывать алгоритмы - только суть.
 
Сверху