Проверка владельца контента в Cotonti Siena v0.9.26 на PHP 8.4

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

Проверка владельца контента в Cotonti Siena v0.9.26 на PHP 8.4

В Cotonti Siena v0.9.26, работающей на PHP 8.4, управление доступом к контенту в зависимости от того, является ли пользователь его владельцем, — это важная задача для создания безопасного и удобного интерфейса. В этой статье подробно описывается, как реализовать проверку владельца контента с помощью двух функций: cot_getUserDataOwner() и cot_isOwner(). Мы рассмотрим, как добавить эти функции в файл system/functions.custom.php и использовать их в различных локациях сайта, таких как профиль пользователя, статьи, личные сообщения и комментарии на форуме. Также приведем примеры использования глобальных переменных {PHP.usr.profile.user_name}, {PHP.usr.name}, {PHP.usr.id}, {PHP.urr.user_name} и {PHP.urr.user_id} для отображения данных и условного интерфейса.

 

 

Добавление функций в system/functions.custom.php

Для начала необходимо создать или отредактировать файл system/functions.custom.php в корневой папке системы Cotonti. Этот файл предназначен для пользовательских функций, которые будут доступны глобально на сайте. Ниже приведен код функций, которые определяют владельца контента и проверяют, является ли текущий пользователь владельцем.

<?php
/**
 * Файл: system/functions.custom.php
 *
 * Получает данные пользователя-владельца страницы.
 * Определяет владельца по URL-параметрам 'id' или 'u'.
 * Если они пустые, берется текущий авторизованный пользователь.
 *
 * @return array|null Массив с данными пользователя или null, если пользователь не найден.
 */
function cot_getUserDataOwner()
{
    $id = cot_import('id', 'G', 'INT');
    $u = cot_import('u', 'G', 'TXT');

    if (!empty($u) && empty($id)) {
        $id = Cot::$db->query('SELECT user_id FROM ' . Cot::$db->users . ' WHERE user_name = ? LIMIT 1', [$u])->fetchColumn();
    } elseif (empty($id) && empty($u) && Cot::$usr['id'] > 0) {
        $id = Cot::$usr['id'];
    }

    if ($id > 0) {
        return Cot::$db->query('SELECT * FROM ' . Cot::$db->users . ' WHERE user_id = ? LIMIT 1', [$id])->fetch();
    }

    return null;
}

/**
 * Проверяет, является ли текущий пользователь владельцем страницы.
 *
 * @return bool True, если текущий пользователь — владелец, иначе false.
 */
function cot_isOwner()
{
    $ownerData = cot_getUserDataOwner();
    return !empty($ownerData) && Cot::$usr['id'] > 0 && Cot::$usr['id'] == $ownerData['user_id'];
}
?>

Объяснение функций

  1. cot_getUserDataOwner():
    • Функция проверяет URL-параметры id (числовой идентификатор пользователя) или u (имя пользователя).
    • Если указан параметр u, но нет id, выполняется запрос к базе данных для получения user_id по имени пользователя.
    • Если оба параметра отсутствуют, но пользователь авторизован (Cot::$usr['id'] > 0), используется ID текущего пользователя.
    • Если id определен, функция возвращает массив с данными пользователя из таблицы users или null, если пользователь не найден.
  2. cot_isOwner():
    • Использует cot_getUserDataOwner() для получения данных владельца.
    • Проверяет, совпадает ли ID текущего пользователя (Cot::$usr['id']) с ID владельца ($ownerData['user_id']).
    • Возвращает true, если текущий пользователь — владелец, иначе false.

Эти функции можно вызывать в шаблонах Cotonti с помощью тега {PHP|cot_isOwner()} для условного отображения контента.


Примеры использования в разных локациях сайта

Ниже приведены примеры использования функций в различных частях сайта. Каждый пример включает подробное описание, где и как использовать код, а также как работают глобальные переменные.

1. Профиль пользователя

В профиле пользователя важно показывать кнопки управления (например, "Редактировать профиль" или "Изменить аватар") только владельцу профиля. Это можно реализовать в шаблоне users.profile.tpl.

<!-- Проверка, является ли текущий пользователь владельцем профиля -->
<!-- IF {PHP|cot_isOwner()} -->
<div class="profile-controls">
    <button onclick="window.location.href='{PHP|cot_url('users', 'm=profile&act=edit')}';">Редактировать профиль</button>
    <button onclick="window.location.href='{PHP|cot_url('users', 'm=profile&act=avatar')}';">Изменить аватар</button>
</div>
<p>Привет, <b>{PHP.usr.profile.user_name}</b>! Это ваш профиль (ID: {PHP.usr.id}).</p>
<!-- ELSE -->
<p>Вы смотрите профиль пользователя <b>{PHP.urr.user_name}</b> (ID: {PHP.urr.user_id}).</p>
<!-- ENDIF -->

Объяснение:

  • {PHP|cot_isOwner()} возвращает true, если текущий пользователь просматривает свой профиль.
  • Если пользователь — владелец, отображаются кнопки управления с использованием функции cot_url() для генерации ссылок.
  • {PHP.usr.profile.user_name} и {PHP.usr.id} показывают данные текущего пользователя, а {PHP.urr.user_name} и {PHP.urr.user_id} — данные владельца профиля (того, чей профиль просматривается).

2. Список статей пользователя

В разделе со списком статей, например, в модуле page, можно показывать кнопки "Редактировать" и "Удалить" только для автора статьи. Это реализуется в шаблоне page.list.tpl.

<!-- BEGIN: PAGE_ROW -->
<div class="article-item">
    <h2>{PAGE_ROW_TITLE}</h2>
    <p>{PAGE_ROW_TEXT}</p>
    <!-- IF {PHP|cot_isOwner()} -->
    <div class="article-controls">
        <button onclick="window.location.href='{PHP|cot_url('page', 'm=edit&id={PAGE_ROW_ID}')}';">Редактировать</button>
        <button onclick="if(confirm('Удалить статью?')) window.location.href='{PHP|cot_url('page', 'm=delete&id={PAGE_ROW_ID}')}';">Удалить</button>
    </div>
    <!-- ENDIF -->
    <p>Автор: <b>{PHP.urr.user_name}</b> (ID: {PHP.urr.user_id})</p>
</div>
<!-- END: PAGE_ROW -->

Объяснение:

  • {PHP|cot_isOwner()} проверяет, является ли текущий пользователь автором статьи (владелец определяется по параметру id или u в URL или по текущему пользователю).
  • Кнопки "Редактировать" и "Удалить" отображаются только для владельца.
  • {PAGE_ROW_ID} — это ID статьи, используемый для генерации ссылок на редактирование или удаление.
  • {PHP.urr.user_name} и {PHP.urr.user_id} показывают данные автора статьи.

3. Личные сообщения

В модуле личных сообщений (pm) можно отображать кнопку удаления сообщения только для его автора. Это реализуется в шаблоне pm.list.tpl.

<!-- BEGIN: PM_ROW -->
<div class="pm-item">
    <p><b>{PHP.usr.name}</b> написал: {PM_ROW_TEXT}</p>
    <!-- IF {PHP|cot_isOwner()} -->
    <button onclick="if(confirm('Удалить сообщение?')) window.location.href='{PHP|cot_url('pm', 'm=delete&id={PM_ROW_ID}')}';">Удалить сообщение</button>
    <!-- ENDIF -->
    <p>Получатель: <b>{PHP.urr.user_name}</b> (ID: {PHP.urr.user_id})</p>
</div>
<!-- END: PM_ROW -->

Объяснение:

  • {PHP|cot_isOwner()} проверяет, является ли текущий пользователь отправителем сообщения.
  • Кнопка удаления отображается только для владельца сообщения.
  • {PM_ROW_TEXT} содержит текст сообщения, а {PM_ROW_ID} — его ID для формирования ссылки на удаление.
  • {PHP.usr.name} показывает имя текущего пользователя, а {PHP.urr.user_name} и {PHP.urr.user_id} — данные получателя или отправителя.

4. Комментарии на форуме

В модуле форумов (forums) можно показывать кнопку редактирования комментария только его автору. Это реализуется в шаблоне forums.posts.tpl.

<!-- BEGIN: FORUMS_POSTS_ROW -->
<div class="comment">
    <p>{FORUMS_POSTS_ROW_TEXT}</p>
    <p>Автор: <b>{PHP.urr.user_name}</b> (ID: {PHP.urr.user_id})</p>
    <!-- IF {PHP|cot_isOwner()} -->
    <button onclick="window.location.href='{PHP|cot_url('forums', 'm=editpost&id={FORUMS_POSTS_ROW_ID}')}';">Редактировать комментарий</button>
    <!-- ENDIF -->
</div>
<!-- END: FORUMS_POSTS_ROW -->

Объяснение:

  • {PHP|cot_isOwner()} проверяет, является ли текущий пользователь автором комментария.
  • Кнопка "Редактировать комментарий" отображается только для владельца.
  • {FORUMS_POSTS_ROW_TEXT} содержит текст комментария, а {FORUMS_POSTS_ROW_ID} — его ID.
  • {PHP.urr.user_name} и {PHP.urr.user_id} показывают данные автора комментария.

5. Универсальный блок проверки

Этот пример можно использовать на любой странице, где требуется отобразить информацию о владельце или показать условный контент. Например, в шаблоне index.tpl или любом другом.

<!-- IF {PHP|cot_isOwner()} -->
<p>Вы владелец страницы!</p>
<p>{PHP.usr.profile.user_name} | <b>{PHP.usr.name}</b> | * {PHP.usr.user_name} * {PHP.usr.id} - {PHP.urr.user_name} <b>{PHP.urr.user_id}</b></p>
<!-- ELSE -->
<p>Вы просматриваете чужую страницу.</p>
<p>{PHP.usr.name} | Привет, я - {PHP.urr.user_name}</p>
<hr>
<p>Привет {PHP.usr.profile.user_name} | <b>{PHP.usr.name}</b> | * {PHP.usr.user_name} * {PHP.usr.id} - {PHP.urr.user_name} <b>{PHP.urr.user_id}</b></p>
<!-- ENDIF -->

Объяснение:

  • {PHP|cot_isOwner()} определяет, является ли текущий пользователь владельцем страницы.
  • Если пользователь — владелец, отображается сообщение "Вы владелец страницы!" и информация о нем.
  • Если пользователь — гость или просматривает чужую страницу, отображается приветственное сообщение и данные владельца страницы.
  • Глобальные переменные {PHP.usr.profile.user_name}, {PHP.usr.name}, {PHP.usr.user_name}, {PHP.usr.id}, {PHP.urr.user_name} и {PHP.urr.user_id} используются для вывода информации о текущем пользователе и владельце страницы.

Заключение

Функции cot_getUserDataOwner() и cot_isOwner() предоставляют мощный инструмент для управления доступом к контенту в Cotonti Siena v0.9.26. Их можно использовать в любых модулях и шаблонах для условного отображения элементов интерфейса, таких как кнопки редактирования, удаления или управления профилем. Глобальные переменные, такие как {PHP.usr.profile.user_name} и {PHP.urr.user_id}, позволяют гибко отображать данные пользователей, делая интерфейс информативным и безопасным.

Добавив эти функции в system/functions.custom.php и используя приведенные примеры в шаблонах, вы сможете легко настроить отображение контента только для владельцев в различных локациях сайта, таких как профили, статьи, сообщения и форумы.

6 минут чтения Sodium Carbonate

Комментарии (0)

Комментарии отсутствуют
Добавление комментариев доступно только зарегистрированным пользователям

Автор контента

webitproff

Оффлайн

Sodium Carbonate

Последняя авторизация: 19.07.2026 01:57

  • Страница размещена: 06.09.2025 08:04
  • Последнее обновление: 06.09.2025 08:22

Похожие страницы

Документация по переменным пользователя и владельца контента в Cotonti 0.9.26
1 Документация по переменным пользователя и владельца контента в Cotonti 0.9.26ВведениеCotonti предоставляет глобальные
Проверка прав пользователей "cot_auth()" в шаблонах Cotonti
2 Примеры использования cot_auth() в шаблонах Cotonti с разными масками прав (R, W, A, etc.) и с категориями тоже. Как
Как устроена проверка активности плагина в шаблонах
3 Как устроена проверка активности плагина в шаблонахcot_plugin_active() вызывает ExtensionsService::isPluginActive(),
Теги заголовков H1-H6 для структурирования контента.
4 Используйте теги заголовков H1-H6 для структурирования контента. Тег заголовка используется для выражения того, что
9 стратегий удаления негативного контента из Интернета
5 Негативные, ложные и дискредитирующие материалы в Интернете имеют серьезные последствия для компаний и частных лиц,