Проверка прав пользователей "cot_auth()" в шаблонах Cotonti

Примеры использования cot_auth() в шаблонах с разными масками прав (R, W, A, ...) . Как это работает в разных ситуациях, чтобы применить это в своем сайте.

Примеры использования cot_auth() в шаблонах Cotonti с разными масками прав (R, W, A, etc.) и с категориями тоже.
Как это работает в разных ситуациях, чтобы применить это к своему проекту. Поехали!

В шаблонах можем встречать условия: <!-- IF {PHP.usr.id|cot_auth('page', '', 'W')} --> и <!-- IF {PHP|cot_auth('page', '', 'W')} -->

Что это такое?


Отличие от версии с {PHP.usr.id}

{PHP|cot_auth('page', '', 'W')} и {PHP.usr.id|cot_auth('page', '', 'W')} в данном случае значат одно и то же, потому что cot_auth() без аргумента пользователя берёт текущего юзера из глобальной переменной $usr['id'].

Разница только в стиле записи:

{PHP.usr.id|cot_auth(...)} — явно указывает ID юзера, что полезно для читаемости или если нужно проверить права другого юзера (например, {PAGE_OWNER_ID|cot_auth(...)}).
{PHP|cot_auth(...)} — короче, но менее очевидно, что проверяется текущий юзер.


Это <!-- IF {PHP|cot_auth(...)} --> является условным оператором в шаблонизаторе Cotonti, который проверяет права доступа текущего пользователя через функцию cot_auth().

Попробуем по шагам:

    {PHP.usr.id|cot_auth('page', '', 'W')}:
        {PHP.usr.id} — это ID текущего пользователя (например, 0 для гостя, или число вроде 1, 42 для зарегистрированного).
        | — это фильтр в Cotonti, который применяет функцию справа к значению слева.
        cot_auth('page', '', 'W') — это вызов функции cot_auth(), которая проверяет права доступа.
    Функция cot_auth():
        cot_auth($area, $cat, $mask) — стандартная функция Cotonti для проверки прав.
        $area = 'page' — указывает модуль или область, здесь это модуль "Страницы" (page).
        $cat = '' — категория, к которой применяется проверка. Пустая строка ('') означает "любая категория" или "глобальные права для модуля".
        $mask = 'W' — маска прав, где 'W' означает "Write" (право на запись, создание или редактирование).
    Что проверяется?
        {PHP.usr.id|cot_auth('page', '', 'W')} возвращает true (или ненулевое значение), если пользователь с ID {PHP.usr.id} имеет право на запись (W) в модуле page для любой категории.
        Например:
            Если {PHP.usr.id} = 0 (гость), а гости не имеют права писать страницы — вернётся false.
            Если {PHP.usr.id} = 1 (зарегистрированный юзер), и у него есть права на создание страниц — вернётся true.
    <!-- IF ... --> ... <!-- ENDIF -->:
        Это условие в шаблоне: если результат проверки true, то "тут какой-то код" выполнится и отобразится.
        Если false — код внутри блока будет пропущен.

Пример в контексте

Допустим, у тебя есть кнопка "Добавить страницу":

<!-- IF {PHP.usr.id|cot_auth('page', '', 'W')} -->
    <a href="{PHP|cot_url('page', 'm=add')}">Добавить страницу</a>
<!-- ENDIF -->

    Если текущий пользователь имеет право создавать страницы (W в page), он увидит ссылку.
    Если нет (например, гость или юзер без прав) — ссылка не отобразится.

Где это используется?

    В шаблонах вроде page.tpl, page.list.tpl или кастомных модулях.
    Обычно проверяет, может ли юзер создавать (W), редактировать (A), читать (R) или удалять (1) контент.

Полный смысл

Эта запись значит: "Если текущий пользователь имеет право на запись в модуле страниц, покажи этот код". Права задаются в админке Cotonti (Администрирование → Пользователи → Группы) или в конфиге модуля.

Закрепляем, что такое cot_auth()?

    Это функция Cotonti для проверки прав доступа.
    Синтаксис: cot_auth($area, $cat, $mask):
        $area — модуль (например, 'page', 'forums').
        $cat — код категории (например, 'news', 'blog') или '' для глобальных прав.
        $mask — строка символов прав:
            R — Read (чтение).
            W — Write (создание/запись).
            A — Admin (администрирование, например, редактирование чужого контента).
            1 — Custom 1 (кастомное право, зависит от модуля, часто удаление).
            И так далее (могут быть другие, в зависимости от модуля).
    В шаблоне {PHP.usr.id|cot_auth('area', 'cat', 'mask')} возвращает true, если у пользователя есть указанное право.
    

Пример 1: Глобальные права на запись в модуле page

<!-- Проверяем, может ли текущий пользователь создавать страницы в модуле 'page' (глобально, без категории) -->
<!-- IF {PHP.usr.id|cot_auth('page', '', 'W')} -->
    <a href="{PHP|cot_url('page', 'm=add')}" class="btn btn-primary">Добавить страницу</a>
<!-- ENDIF -->

    Что делает? Если у юзера есть право W (Write) в модуле page для любой категории, показываем кнопку "Добавить страницу".
    Когда сработает? Для зарегистрированных пользователей с правом создавать страницы (например, группа "Авторы" в админке).

Пример 2: Право чтения для конкретной категории

<!-- Проверяем, может ли юзер читать страницы в категории 'news' -->
<!-- IF {PHP.usr.id|cot_auth('page', 'news', 'R')} -->
    <p>Вот список новостей: {PAGE_LIST}</p>
<!-- ELSE -->
    <p>У вас нет доступа к новостям.</p>
<!-- ENDIF -->

    Что делает? Показывает контент, если у юзера есть право R (Read) в категории news модуля page.
    Когда сработает? Даже для гостей, если в админке (Структура → Категории → news) для группы "Гости" стоит галочка "Читать".

Пример 3: Право администрирования (редактирование) с категорией

<!-- Проверяем, может ли юзер редактировать страницы в категории 'blog' -->
<!-- IF {PHP.usr.id|cot_auth('page', 'blog', 'A')} -->
    <a href="{PAGE_ID|cot_url('page', 'm=edit&id=$this')}" class="btn btn-warning">Редактировать</a>
<!-- ENDIF -->

    Что делает? Показывает ссылку на редактирование, если у юзера есть право A (Admin) в категории blog.
    Когда сработает? Для админов или модераторов, у которых в группе стоит право "Администрирование" для blog.

Пример 4: Комбинированные права (чтение и запись) глобально

<!-- Проверяем, есть ли у юзера права на чтение И запись в модуле 'page' -->
<!-- IF {PHP.usr.id|cot_auth('page', '', 'RW')} -->
    <p>Вы можете читать и добавлять страницы!</p>
    <a href="{PHP|cot_url('page', 'm=add')}">Создать</a>
<!-- ENDIF -->

    Что делает? Требует оба права: R (чтение) и W (запись) для модуля page.
    Когда сработает? Только если у юзера есть оба права (например, для авторов или редакторов).

Пример 5: Право удаления (кастомное 1) с категорией

<!-- Проверяем, может ли юзер удалять страницы в категории 'games' -->
<!-- IF {PHP.usr.id|cot_auth('page', 'games', '1')} -->
    <a href="{PAGE_ID|cot_url('page', 'm=delete&id=$this')}" class="btn btn-danger">Удалить</a>
<!-- ENDIF -->

    Что делает? Показывает кнопку удаления, если у юзера есть право 1 (обычно удаление) в категории games.
    Когда сработает? Для админов или пользователей с кастомным правом "Удаление" в настройках категории.

Пример 6: Проверка для гостей (без категории)

<!-- Проверяем, может ли гость (id=0) читать страницы -->
<!-- IF {PHP.usr.id|cot_auth('page', '', 'R')} -->
    <p>Добро пожаловать, гость! Вот публичные страницы.</p>
<!-- ELSE -->
    <p>Зарегистрируйтесь, чтобы видеть контент.</p>
<!-- ENDIF -->

    Что делает? Если даже гость ({PHP.usr.id} = 0) имеет право R, показываем контент.
    Когда сработает? Если в админке для группы "Гости" включено право "Читать" в модуле page.

Как это работает с категориями?

    Если $cat = '' (пустая строка), проверяются глобальные права для модуля. Это удобно для общих действий (например, "Добавить страницу" без привязки к категории).
    Если $cat = 'news' или другой код категории, проверяются права конкретной категории. Код категории задаётся в админке (Структура → Категории → Код).

Пример с категорией и без:

<!-- Глобально -->
<!-- IF {PHP.usr.id|cot_auth('page', '', 'W')} -->
    <p>Можете добавлять в любую категорию</p>
<!-- ENDIF -->

<!-- Только для 'blog' -->
<!-- IF {PHP.usr.id|cot_auth('page', 'blog', 'W')} -->
    <p>Можете добавлять только в блог</p>
<!-- ENDIF -->

Где посмотреть права?

    Админка: Администрирование → Пользователи → Группы → [Выбрать группу] → Права.
    Категории: Администрирование → Структура → Категории → [Выбрать категорию] → Права.
    Права задаются галочками: "Читать", "Писать", "Администрировать", "Дополнительно".

Что ещё?
Можно ли эту запись модифицировать, что бы получить проверку: если пользователь владелец страницы и имеет права на редактирование страницы в категории?

Да, можно модифицировать эту запись, чтобы проверить одновременно два условия:

    Является ли пользователь владельцем страницы ({PHP.usr.id} == {PAGE_OWNER_ID}).
    Имеет ли он права на редактирование (W или A) в конкретной категории.

В Cotonti это делается через комбинацию условий в шаблоне с использованием cot_auth().
Разберём, как это сделать на примерах.
Как это будет выглядеть?

Например, чтобы код внутри блока выполнился только если:

    {PHP.usr.id} (ID текущего пользователя) равен {PAGE_OWNER_ID} (ID владельца страницы).
    У пользователя есть права на редактирование в категории, например, 'blog'.

В шаблонах Cotonti можно комбинировать условия через && (логическое "И") или вкладывать <!-- IF -->.

Вот оба варианта:

Вариант 1: Одно условие с &&

<!-- IF {PHP.usr.id} == {PAGE_OWNER_ID} && {PHP.usr.id|cot_auth('page', 'blog', 'W')} -->
    <a href="{PAGE_ID|cot_url('page', 'm=edit&id=$this')}" class="btn btn-warning">Редактировать</a>
<!-- ENDIF -->

    {PHP.usr.id} == {PAGE_OWNER_ID} — проверяет, совпадает ли ID пользователя с ID владельца страницы.
    {PHP.usr.id|cot_auth('page', 'blog', 'W')} — проверяет, есть ли право W (Write) в категории 'blog'.
    && — логическое "И", оба условия должны быть true.

Вариант 2: Вложенные условия

<!-- IF {PHP.usr.id} == {PAGE_OWNER_ID} -->
    <!-- IF {PHP.usr.id|cot_auth('page', 'blog', 'W')} -->
        <a href="{PAGE_ID|cot_url('page', 'm=edit&id=$this')}" class="btn btn-warning">Редактировать</a>
    <!-- ENDIF -->
<!-- ENDIF -->

    Сначала проверяем, владелец ли это ({PHP.usr.id} == {PAGE_OWNER_ID}).
    Если да, то проверяем права на запись в категории 'blog'.
    Код внутри выполнится только при выполнении обоих условий.

Какой вариант лучше?

    Вариант 1 короче и читается проще, если условий немного.
    Вариант 2 удобнее, если внутри нужно больше логики или дополнительных проверок.

Что использовать: W или A?

    W (Write): Обычно для создания или редактирования своих страниц. Если нужно, чтобы владелец мог редактировать только свои страницы, - используем W.
    A (Admin): Для редактирования любых страниц в категории (включая чужие). Если владельцу нужно больше прав, можно проверить A.

Пример с A:

<!-- IF {PHP.usr.id} == {PAGE_OWNER_ID} && {PHP.usr.id|cot_auth('page', 'blog', 'A')} -->
    <a href="{PAGE_ID|cot_url('page', 'm=edit&id=$this')}" class="btn btn-warning">Редактировать (админ)</a>
<!-- ENDIF -->

Пример в контексте

Допустим, это часть page.tpl, где показывается кнопка редактирования только для владельца с правами в категории 'news':

<div class="card mb-4">
    <div class="card-body">
        <h3>{PAGE_TITLE}</h3>
        <p>Автор: {PAGE_OWNER}</p>
        <!-- Проверка: владелец страницы И имеет право редактировать в категории 'news' -->
        <!-- IF {PHP.usr.id} == {PAGE_OWNER_ID} && {PHP.usr.id|cot_auth('page', 'news', 'W')} -->
            <a href="{PAGE_ID|cot_url('page', 'm=edit&id=$this')}" class="btn btn-warning">Редактировать</a>
        <!-- ENDIF -->
    </div>
</div>

Кнопка появится, только если текущий пользователь — владелец страницы ({PHP.usr.id} == {PAGE_OWNER_ID}) и у него есть право W в категории 'news'.

Что если категория динамическая?

Если категория страницы берётся из {PAGE_CAT}, можно использовать её вместо фиксированной 'blog':

<!-- IF {PHP.usr.id} == {PAGE_OWNER_ID} && {PHP.usr.id|cot_auth('page', {PAGE_CAT}, 'W')} -->
    <a href="{PAGE_ID|cot_url('page', 'm=edit&id=$this')}" class="btn btn-warning">Редактировать</a>
<!-- ENDIF -->

{PAGE_CAT} — код категории текущей страницы (например, 'news', 'blog').
Проверка будет учитывать права именно для этой категории.

Проверка

В админке убедитесь, что у группы пользователя (например, "Авторы") есть право W для нужной категории (Структура → Категории → news → Права).
{PAGE_OWNER_ID} должен быть определён в шаблоне (ID владельца страницы).

 

8 minutes read Sodium Carbonate

Comments (0)

No comments yet
Only registered users can post new comments

Content author

webitproff

Offline

Sodium Carbonate

Last logged: 2026-09-01 22:41

About me briefly
Support and development of web projects on the CMF Cotonti: private messengers via the website, open and closed small social networks, trading platforms and marketplaces, freelance and services exchange portal, catalogs of goods from wholesale suppliers, dropshipping platforms, online stores, and much more.
View developments and download
Public portfolio of my works and developments
Telegram for messages
@webitproff
Telegram channel
@s/aBuyFILE
  • Page published: 2025-03-21 14:56
  • Last update: 2025-03-21 14:56

Similar pages

Как устроена проверка активности плагина в шаблонах
1 Как устроена проверка активности плагина в шаблонахcot_plugin_active() вызывает ExtensionsService::isPluginActive(),
Функция cot_auth в Cotonti
2 Разберем функцию cot_auth(), которая в фреймворке Cotonti используется для проверки прав доступа пользователя к
Настройка прав. Документация по CMF Cotonti
3 Настройка прав для групп пользователей Настройка прав для групп пользователей осуществляется в админ-панели в разделе
Проверка владельца контента в Cotonti на PHP 8.5
4 Проверка владельца контента в Cotonti на PHP 8.5В Cotonti, управление доступом к контенту в зависимости от того,
Полное руководство по системе прав доступа Cotonti: маски, биты, группы на примере модуля Market
5 Полное руководство по системе прав доступа Cotonti: маски, биты, группы на примере модуля