UMIhelp

Разработка сайта на UMI.CMS => Шаблоны XSLT => Тема начата: MIke от 17 Мая 2013, 14:32:22

Название: Права пользователей на скачиваемый файл.
Отправлено: MIke от 17 Мая 2013, 14:32:22
Приветствую всех.
Недавно передали на обслуживание сайт на UMI, а в ней я новичок.

Задача такая:
на сайте размещена ссылка на файл Excel (прайс-лист).
Необходимо разрешить его скачивать только зарегистрированным пользователям определенной группы.
Гостям скачивать запрещено.

На данный момент пробую на локальной машине.
Размещаю файл в файловом менеджере.
У пользователя "Гость" убираю галочки "Просмотр файлов для скачивания" и "Скачивание файлов".
На странице размещаю ссылку на файл (типа http://localhost/files/Price1.xls).
Захожу без регистрации, гостем.
При нажатии на ссылку качается без проблем.

Кто-нибудь может подсказать в каком месте у меня кривизна рук?
:)
Название: Re:Права пользователей на скачиваемый файл.
Отправлено: Byte от 18 Мая 2013, 12:02:32
если шаблонизатор xslt, то попробуй в месте вывода ссылки сделать так:
<xsl:if test="result/user/@status='auth'" >
  код вывода ссылки
</xsl:if>

не получится, пиши, попробую помочь
Название: Re:Права пользователей на скачиваемый файл.
Отправлено: MIke от 20 Мая 2013, 09:25:30
если шаблонизатор xslt, то попробуй в месте вывода ссылки сделать так:
<xsl:if test="result/user/@status='auth'" >
  код вывода ссылки
</xsl:if>
При таком подходе гостям ссылка не видна будет.
А сайт в принципе не использует авторизацию, за ненадобностью, только на одной странице и нужна.
Идеально было бы так: все видят ссылку (или кнопку), при нажатии идет проверка на группу, если гость, то появляется окно авторизации.
Название: Re:Права пользователей на скачиваемый файл.
Отправлено: admin от 20 Мая 2013, 09:30:03
не пробовал с контролем при скачивании файла (скорее всего нужен будет кастомный макрос), но можно сделать таким образом.

Вы создаете страницу типа "Скачиваемый файл" в которой есть поле которое указывает какой файл будет вкачиваться при заходе на эту страницу. Вместо ссылки на файл, вы вставляете ссылку на эту страницу.

А права на скачивание назначаете через права на просмотр страницы (при редактировании страницы "Скачиваемый файл" в самом нигу... убираете галочку около иконки глазик у "Все" и добавляете новую группу полей у которых проставляете галочку у глазика)
Название: Re:Права пользователей на скачиваемый файл.
Отправлено: MIke от 20 Мая 2013, 10:16:36
Вы создаете страницу типа "Скачиваемый файл" в которой есть поле которое указывает какой файл будет вкачиваться при заходе на эту страницу. Вместо ссылки на файл, вы вставляете ссылку на эту страницу.

А права на скачивание назначаете через права на просмотр страницы (при редактировании страницы "Скачиваемый файл" в самом нигу... убираете галочку около иконки глазик у "Все" и добавляете новую группу полей у которых проставляете галочку у глазика)
Да, так-то отрабатывает. Но!
Гость при таком подходе видит пустую страницу. Т.е. ничего не видит.
:)
А надо бы сообщение выдать типа "авторизуйтесь для скачивания файла" или сразу окно с авторизацией.
Название: Re:Права пользователей на скачиваемый файл.
Отправлено: admin от 20 Мая 2013, 11:19:24
вообще, должна выдаваться стрница с запросом авторизации, у вас ничего не выводиться в том месте где вызывается макрос %content% или вообще белая страница?
Название: Re:Права пользователей на скачиваемый файл.
Отправлено: MIke от 20 Мая 2013, 12:09:34
вообще, должна выдаваться стрница с запросом авторизации, у вас ничего не выводиться в том месте где вызывается макрос %content% или вообще белая страница?
На странице с результатом (самим файлом) в контенте стоит ссылка:
<p><a href="/files/Price1.xls">Скачай прайс!</a></p>

Вывод контента в шаблоне реализован стандартно:
<xsl:value-of select="document(concat('upage://',page/@id))/udata/page/properties/group[@name='common']/property[@name='content']/value" disable-output-escaping="yes"/>

Если гость открывает, то никаких запросов, просто белая страница.

Название: Re:Права пользователей на скачиваемый файл.
Отправлено: MIke от 24 Мая 2013, 12:30:24
Реализовал в шаблоне, по типу пользователей.
Незарегистрированным показывается форма авторизации.
После авторизации появляется ссылка на файл.
Но в таком варианте любой другой может, зная прямую ссылку, скачать не заходя на страницу и не регистрируясь.
Поэтому скачивание решено организовать кастомным макросом.

Функция вызывается так:
<xsl:value-of select="document('udata://custom/price_download/price/price2.xls')/udata" />

Только что-то не соображу, как сделать чтобы она не сразу выполнялась, а по нажатии на какую-нибудь кнопку или ссылку?
Название: Re:Права пользователей на скачиваемый файл.
Отправлено: MIke от 27 Мая 2013, 08:56:46
Как обычно сам с собой говорю.
:)

Затупил совсем. Ясно что вызов по ссылке такой:
<a href="/udata/custom/price_download/price/price2.xls">Скачать прайс-лист</a>
Название: Re:Права пользователей на скачиваемый файл.
Отправлено: admin от 31 Мая 2013, 13:12:43
если вам нужно защитить файлы, и вы пошли по пути написание кастома, то скорее всего имеет смысл положить файлы в отдельную папку. Запретить к ней доступ (например через htaccess) и высылать   ссылка на временную копию файла сгенерированного на ограниченное время или ограниченное количество скачивания.
Название: Re:Права пользователей на скачиваемый файл.
Отправлено: MIke от 03 Июня 2013, 11:45:48
если вам нужно защитить файлы, и вы пошли по пути написание кастома, то скорее всего имеет смысл положить файлы в отдельную папку. Запретить к ней доступ (например через htaccess) и высылать   ссылка на временную копию файла сгенерированного на ограниченное время или ограниченное количество скачивания.
Ну с помощью PHP это понятно, можно наделать всяких изощрений.
Но вопрос, почему все же не отрабатывается простая установка прав на файл в UMI? Ведь есть пункт меню "Скачивание файлов. Или он для другого?
Название: Re:Права пользователей на скачиваемый файл.
Отправлено: Vladimir от 03 Июня 2013, 14:47:44
Если вы обращаетесь к файлу напрямую, то обработка запроса идет в обход в php, вы работаете с файловой системой сервера. Естественно, файловая система о правах ЮМИ ничего не знает и знать не может.
Вам нужно запретить доступ по http к директории с файлами, например, средствами htaccess,  чтобы отдавал его не сервер, а php (хотя если файлы большие, а клиентов много, администраторы вам спасибо не скажут), либо делать наподобии http://blog.kovyrin.net/2006/11/01/nginx-x-accel-redirect-php-rails/lang/ru/