Скачивание файла только зарегистрированным пользователям

Материал из Umicms
Версия от 17:45, 28 августа 2011; SerjK (обсуждение | вклад) (Новая страница: «'''Задача:''' Сделать скачивание файла только для зарегистрированных пользователей, а для …»)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к:навигация, поиск

Задача:

Сделать скачивание файла только для зарегистрированных пользователей, а для незарегистрированных (Гостей) пользователей делать редирект на соответствующую страницу. По умолчанию, выставление прав доступа к этой странице только зарегистрированным пользователям, не решит нашу задачу, потому что Гость будет попадать на страницу и видеть: "Имя файла: Размер файла: Kb Если закачивание файла не начнется через 10 сек, кликните по этой ссылке" , т.е ощущение как будто страница сломана.

Решение:

Мы будем рассматривать реализацию этой задачи на примере демо-сайта на xslt-шаблонизаторе DemoDizzy. В файл shared_file.xsl, в котором шаблоны обработчики страницы, находящийся по пути ~/xsltTpls/modules/filemanager/

В шаблон:

result[@module = 'filemanager'][@method = 'shared_file']

вместо вызова:

<xsl:apply-templates select="document(concat('udata://filemanager/shared_file//', $document-page-id))/udata" />

Ставим на Гостя вызов:

<xsl:choose>
          <xsl:when test="$user-type = 'guest'">
             Файл доступен только для зарегистрированных пользователей.
             <xsl:apply-templates select="document('udata://users/auth/')/udata" />
          </xsl:when>
          <xsl:otherwise>
             <xsl:apply-templates select="document(concat('udata://filemanager/shared_file//', $document-page-id))/udata" />
          </xsl:otherwise>
</xsl:choose>

т.е. если Гость, ты вызываем форму авторизации:

<xsl:apply-templates select="document('udata://users/auth/')/udata" />

шаблоны в файле ~/xsltTpls/modules/users/authorization.xsl

если не Гость, то ставим стандартный вызов, который отобразит данные о файле. В основном шаблоне:

xsltTpls/default.xsl, должна быть определена переменная:
<xsl:variable name="user-type" select="/result/user/@type" />