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

Материал из Umicms
Перейти к:навигация, поиск

Актуально для версии 2.9.6

Задача:

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

Решение:

Мы будем рассматривать реализацию этой задачи на примере демонстрационного дизайна "Современный интернет-магазин" ("demodizzy"), в котором используется XSLT-шаблонизатор.
В файл \templates\demodizzy\xslt\modules\filemanager\shared_file.xsl в шаблон:

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" />


если не Гость, то выполняем стандартный вызов, который отобразит данные о файле.
В основном шаблоне \templates\demodizzy\xslt\default.xsl должны быть определены следующие переменные:

<xsl:variable name="user-type" select="/result/user/@type" />
<xsl:variable name="document-page-id" select="/result/@pageId" />