Скачивание файла только зарегистрированным пользователям
Актуально для версии 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" />