Руководство по плагину User Demo Admin для Cotonti
Версия: 5.0.0
Автор: webitproff
Лицензия: BSD
Требования: Cotonti (актуальная версия), модуль users
Оглавление
- Обзор плагина и его назначение
- Бизнес-логика плагина
- Взаимодействие демо-админа с интерфейсом сайта
- Техническая памятка по установке и удалению плагина
- Предупреждения безопасности
- Рекомендации по дальнейшей модификации
- Выводы
1. Обзор плагина и его назначение
Плагин User Demo Admin предназначен для создания пользователей с особым уровнем доступа — «демонстрационный администратор» или «администратор только для чтения».
Основная цель — предоставить ограниченный доступ в административную панель Cotonti доверенным лицам (аудит, обучение, демонстрация) без риска случайного или намеренного изменения настроек, контента, прав или структуры сайта.
Плагин "User Demo Admin" - это совершенно новое и экспериментальное расширение для CMF Cotonti.
Используйте его на свой страх и риск.
Плагин не был полностью протестирован, чтобы делать смелые заявления.
По большей части плагин решает задачи, которые ставятся перед мной (как разработчиком расширений и шаблонов), но я рекомендую вам использовать его с особой осторожностью!
Пользователь из группы Demo Admin сможет:
- войти в административную панель;
- просматривать практически все разделы админки, включая настройки, списки пользователей, страницы, модули и плагины;
- видеть интерфейс и данные так, как их видит полноценный администратор.
При этом он не сможет:
- сохранять изменения (конфигурация, контент, права);
- удалять или редактировать записи;
- устанавливать/удалять расширения;
- выполнять любые операции, изменяющие состояние системы.
Фактически плагин имитирует режим «только просмотр» для админ-панели, аналогичный демо-режиму в OpenCart или PrestaShop.
Важно: плагин не изменяет структуру базы данных Cotonti. Используются только стандартные таблицы: cot_groups, cot_auth, cot_groups_users, cot_users.
2. Бизнес-логика плагина
2.1. Создание группы «Demo Admin»
При первом обращении к плагину (или при его установке) функция cot_user_demo_admin_ensure_group() проверяет наличие группы с заданным алиасом (по умолчанию demo_admin). Если группа не найдена, она создаётся в таблице cot_groups со следующими параметрами:
grp_name= «Demo Admin»grp_title= «Demo Admin»grp_level= 50 (достаточно высокий, чтобы отображаться как привилегированная группа)grp_alias=demo_admin(настраивается в конфигурации)grp_skiprights= 0 (права используются)grp_pfs_maxfile/grp_pfs_maxtotal= 0 (загрузка файлов запрещена)
2.2. Назначение прав доступа
Плагин использует стандартную систему прав Cotonti, основанную на битовых масках в таблице cot_auth. Для группы демо-администратора устанавливаются следующие права:
| Область | Код | Права (число) | Значение |
|---|---|---|---|
| Админ-панель | admin | 129 | R (чтение) + A (доступ в админку) |
| Пользователи | users | 1 | R (только чтение) |
| Сообщения | message | 1 | R |
| Структура | structure | 1 | R |
| Все модули | (каждый) | 1 | R |
| Все плагины | plug / код | 1 | R |
| Все категории структуры | (код модуля) / категория | 1 | R (для каждой категории) |
Битовые маски:
- R = 1 (чтение)
- W = 2 (запись)
- A = 128 (административный доступ)
Для admin ставится 129 = 1+128, что даёт право на вход в админку, но не даёт права записи (W) и дополнительных привилегий (1-5).
Все остальные области получают только R = 1.
Права на категории структуры. Плагин выдаёт право R не только на корневые разделы модулей (auth_option = 'a'), но и на каждую категорию структуры (например, все категории модуля page, forums и т.д.). Это необходимо, чтобы демо-администратор мог видеть материалы, доступ к которым проверяется через права категорий. Без этого шага пользователь не увидел бы даже публичные страницы и записи.
Для всех прав устанавливается auth_rights_lock = 254, что блокирует изменение этих прав через стандартный интерфейс редактирования (биты R, W, A и дополнительные заблокированы). Это предотвращает случайное расширение прав демо-группы самим демо-пользователем.
2.3. Защита от операций записи
Поскольку штатная система прав Cotonti не может полностью запретить запись при наличии доступа в админку (многие скрипты проверяют только cot_auth('admin', 'a', 'A')), плагин добавляет дополнительный уровень защиты через глобальный хук.
В файле user_demo_admin.global.php реализована проверка:
- Если текущий пользователь принадлежит к группе Demo Admin и находится в админке, то:
- переменная
Cot::$usr['auth_write']принудительно устанавливается вfalse; - анализируется входящий запрос:
- если метод
POST→ считается попыткой записи; - если параметр
a(действие) входит в список опасных (update,save,add,edit,delete,install,uninstall,config,rightsи др.) → попытка записи; - если запрошен раздел
m=configилиm=rights→ попытка записи.
- если метод
- переменная
- При обнаружении попытки записи:
- очищаются массивы
$_POSTи$_REQUEST; - выводится предупреждение «Режим демонстрации: изменения не сохраняются...»;
- выполняется перенаправление на предыдущую страницу (или на главную админки).
- очищаются массивы
Таким образом, любые POST-запросы и действия, которые обычно приводят к изменению данных, блокируются ещё до выполнения основной логики.
2.4. Создание пользователя демо-администратора
В административном интерфейсе плагина (вкладка «Создать пользователя») администратор может ввести имя, email и пароль. После валидации данных (проверка длины, формата, уникальности) вызывается стандартная функция cot_add_user() с указанием основной группы $groupId (ID группы Demo Admin). Созданный пользователь сразу получает все права этой группы.
Письмо активации не отправляется ($sendemail = false).
3. Взаимодействие демо-админа с интерфейсом сайта
3.1. Что можно просматривать
После входа в админ-панель демо-администратор увидит стандартное левое меню и сможет открыть следующие разделы:
- Главная страница админки (обзорная информация).
- Настройки (конфигурация сайта) — все вкладки: основные, безопасность, производительность, темы и т.д. (в режиме просмотра).
- Пользователи — список пользователей, поиск, просмотр профилей (без кнопок редактирования).
- Страницы (если модуль page установлен) — список страниц, структура категорий, просмотр содержимого.
- Расширения — список модулей и плагинов, их настройки (только просмотр, кнопки «Сохранить» будут неактивны или их нажатие будет заблокировано).
- Структура сайта — просмотр категорий и параметров.
- Права доступа — интерфейс просмотра прав групп (с возможным отображением, но без сохранения).
- Инструменты, Файлы, Кэш и другие разделы, доступные обычному администратору.
Благодаря установленным правам R на все модули и категории, демо-админ не увидит сообщений «Нет доступа» при попытке открыть страницы.
Ниже приведена сводная таблица доступа:
| Зона | Что можно | Что нельзя / что происходит |
|---|---|---|
| Фронтенд | Читать страницы, списки, профили пользователей, категории | Редактировать, удалять, добавлять контент (если нет других групп) |
| Вход в админку | Да | — |
| Просмотр разделов админки | Почти все разделы (Configuration, Extensions, Structure, Users, Page и т.д.) | — |
| Кнопки «Сохранить», «Обновить», «Добавить», «Удалить» | Видит кнопки и формы | При нажатии — предупреждение «Режим демонстрации...» + редирект, данные не сохраняются |
| Конфигурация сайта и плагинов | Может открыть и смотреть | Сохранение блокируется |
| Права групп | Может открыть | Изменение блокируется |
| Установка / удаление расширений | Видит список | Действия блокируются |
| Собственный плагин User Demo Admin | Может смотреть список демо-пользователей | Создание новых демо-пользователей и изменение прав — только у настоящего администратора |
Важно: демо-пользователь не является супер-администратором. Он просто имеет право войти в админку и читать.
3.2. Какие операции запрещены
Все операции, которые изменяют состояние системы, будут заблокированы:
- Сохранение любых настроек (конфигурация, темы, модули, плагины).
- Добавление, редактирование, удаление пользователей, страниц, категорий, файлов и т.п.
- Установка, обновление, удаление расширений.
- Изменение прав доступа.
- Очистка кэша, выполнение SQL-запросов и других опасных действий.
Формально интерфейс может содержать кнопки «Сохранить», «Обновить», «Удалить» и т.д., но при попытке их нажать (т.е. отправить POST-запрос или действие, классифицированное как опасное) сработает защита.
3.3. Поведение при попытке сохранения
Когда демо-админ нажимает кнопку сохранения, происходит следующее:
- Браузер отправляет запрос на сервер (обычно POST с параметрами).
- Глобальный хук плагина перехватывает этот запрос.
- Если пользователь определён как демо-админ, а запрос содержит опасные признаки (POST или
aв списке запрещённых), выполняются действия:- очищаются
$_POSTи часть$_REQUEST; - выводится сообщение-предупреждение (обычно всплывающее уведомление);
- происходит редирект на предыдущую страницу или главную админки.
- очищаются
- Целевой скрипт (например, сохранение конфигурации) не выполняется, данные не изменяются.
4. Техническая памятка по установке и удалению плагина
4.1. Установка
- Скопируйте папку
user_demo_adminв директориюplugins/вашего сайта. - Войдите в административную панель Cotonti под учётной записью с полными правами.
- Перейдите в раздел Расширения → Плагины.
- Найдите плагин User Demo Admin в списке доступных.
- Нажмите кнопку Установить.
После установки:
- Будет выполнена функция
cot_user_demo_admin_ensure_group()(если она не была вызвана раньше), создающая группу и права. - Плагин появится в админ-панели в разделе Администрирование → User Demo Admin (или через ссылку
admin.php?m=other&p=user_demo_admin).
Рекомендуется после установки зайти в плагин, открыть вкладку «Права» и нажать «Сохранить права» — это гарантирует пересоздание прав на все текущие категории структуры.
4.2. Удаление
- В разделе Расширения → Плагины найдите установленный плагин User Demo Admin.
- Нажмите кнопку Удалить.
Во время удаления выполняется скрипт uninstall.php, который:
- находит группу по алиасу;
- переводит всех пользователей этой группы в основную группу Members (ID = 4);
- удаляет все связи пользователей с группой в таблице
cot_groups_users; - удаляет все права группы из таблицы
cot_auth; - удаляет саму группу из
cot_groups; - очищает кэш авторизации (
cot_auth_clear('all')).
Важно: после удаления плагина пользователи, относившиеся к демо-группе, теряют доступ в админку и становятся обычными участниками.
Перед удалением рекомендуется вручную удалить или перевести демо-пользователей.
4.3. Файл установки (install.php)
defined('COT_CODE') or die('Wrong URL');
require_once cot_incfile('user_demo_admin', 'plug', 'functions');
$groupId = cot_user_demo_admin_ensure_group();
if (!$groupId) {
cot_error('Failed to create Demo Admin group');
}
Что делает:
- Подключает файл функций плагина.
- Вызывает
cot_user_demo_admin_ensure_group(), которая создаёт группу и назначает все необходимые права. - Если группа не может быть создана, выводит сообщение об ошибке.
4.4. Файл удаления (uninstall.php)
defined('COT_CODE') or die('Wrong URL');
$alias = Cot::$cfg['plugin']['user_demo_admin']['group_alias'] ?? 'demo_admin';
$group = Cot::$db->query(
'SELECT grp_id FROM ' . Cot::$db->groups . ' WHERE grp_alias = ? LIMIT 1',
[$alias]
)->fetch();
if ($group) {
$groupId = (int) $group['grp_id'];
Cot::$db->update(
Cot::$db->users,
['user_maingrp' => COT_GROUP_MEMBERS],
'user_maingrp = ?',
[$groupId]
);
Cot::$db->delete(Cot::$db->groups_users, 'gru_groupid = ?', [$groupId]);
Cot::$db->delete(Cot::$db->auth, 'auth_groupid = ?', [$groupId]);
Cot::$db->delete(Cot::$db->groups, 'grp_id = ?', [$groupId]);
cot_auth_clear('all');
}
Что делает:
- Находит ID группы по алиасу.
- Обновляет
user_maingrpвсех пользователей этой группы на стандартную группу Members (4). - Удаляет связи в
cot_groups_users, права вcot_authи саму группу. - Сбрасывает кэш прав.
4.5. Структура файлов плагина
plugins/user_demo_admin/
├── user_demo_admin.setup.php — регистрация и настройки
├── user_demo_admin.global.php — защита от записи + stub
├── user_demo_admin.admin.php — основной интерфейс (tools)
├── inc/
│ └── user_demo_admin.functions.php — вся бизнес-логика
├── lang/
│ └── user_demo_admin.ru.lang.php — русский язык
├── tpl/
│ └── user_demo_admin.admin.tpl — шаблон админки
└── setup/
├── user_demo_admin.install.php
└── user_demo_admin.uninstall.php
5. Предупреждения безопасности
Плагин User Demo Admin предоставляет довольно широкий доступ к административной информации. Несмотря на все предпринятые меры, следует учитывать следующие риски:
- Обход защиты через прямые запросы.
Теоретически, зная структуру Cotonti, демо-пользователь может попытаться отправить нестандартный POST-запрос, не содержащий запрещённых параметровa. Защита блокирует большинство сценариев, но не гарантирует 100% изоляцию. - Утечка конфиденциальных данных.
Демо-админ может видеть email пользователей, настройки безопасности, пути к файлам, список установленных расширений и другую чувствительную информацию. Не давайте такой доступ незнакомым людям. - Влияние на производительность.
Пользователь с доступом в админку может открывать тяжёлые страницы (например, список всех пользователей с большим количеством записей), что может нагружать сервер. При необходимости ограничьте количество демо-пользователей. - Изменение прав через стандартный интерфейс.
Плагин блокирует права группы черезauth_rights_lock=254, но если кто-то с полным доступом случайно снимет блокировку через прямое редактирование БД, демо-админ может повысить свои права. Регулярно проверяйте целостность настроек. - Несовместимость с некоторыми сторонними плагинами.
Некоторые плагины могут выполнять сохранение через AJAX или альтернативные методы, не перехватываемые стандартным хукомglobal. В таких случаях защита может не сработать. Перед предоставлением демо-доступа протестируйте все критически важные расширения. - Пароль демо-пользователя должен быть сложным.
Не используйтеdemo,123456и т.п. Рекомендуется генерировать надёжный пароль. - Не оставляйте демо-пользователей надолго.
После завершения демонстрации или тестирования удалите или заблокируйте таких пользователей. - Супер-администратор всегда может изменить права группы Demo Admin.
Следите за тем, чтобы права группы не были случайно расширены.
Рекомендации:
- Используйте плагин только для ограниченного круга доверенных лиц.
- Не сообщайте демо-учётные данные публично.
- Периодически проверяйте, что группа и права не были изменены.
- При обнаружении попыток несанкционированного изменения – немедленно удалите демо-пользователя.
6. Рекомендации по дальнейшей модификации
Плагин может быть расширен и адаптирован под конкретные задачи. Рассмотрим возможные направления:
- Более тонкая настройка запрещённых действий.
В файлеuser_demo_admin.global.phpможно добавить дополнительные параметры или URL-шаблоны для блокировки. Например, запретить доступ к определённым разделам, оставив только просмотр. - Поддержка AJAX-запросов.
Для полной защиты следует перехватывать такжеXMLHttpRequest(заголовокX-Requested-With) и блокировать POST-запросы, отправленные через AJAX. - Разделение прав по модулям.
Через вкладку «Права» уже можно точечно запретить чтение отдельных модулей. Можно добавить функцию автоматического скрытия запрещённых пунктов меню. - Логирование действий демо-админа.
Полезно записывать в лог все попытки записи, чтобы отслеживать подозрительную активность. Для этого в блокирующей части можно добавить вызовcot_log(). - Кастомизация сообщений.
Заменить стандартное предупреждение на более информативное, например, с указанием причины и возможных действий. - Интеграция с другими группами.
Можно создать несколько демо-групп с разными наборами прав, используя тот же механизм. - Добавить английский языковой файл
Для мультиязычных сайтов. - Добавить настройку «Разрешённые разделы админки»
Вместо полного доступа можно реализовать whitelist разделов. - Вынести список
$dangerousActionsв настройки плагина
Чтобы администратор мог легко дополнять список опасных действий без правки кода. - Добавить хук после создания демо-пользователя
Например,usersaddsadmin.add.doneили собственный хук для выполнения дополнительных действий. - При создании пользователя автоматически добавлять его в группу Members
Для более предсказуемого поведения на фронтенде (права наследуются от Members + Demo Admin). - Сделать баннер «Вы находитесь в режиме демонстрации»
Отображать предупреждение в шапке админки, чтобы демо-пользователь явно видел ограничения. - Поддержка экстраполей при создании пользователя
Если используются дополнительные поля пользователей, стоит добавить их обработку.
Чек-лист при доработке защиты от записи:
- Сохранение конфигурации.
- Установка/удаление плагинов.
- Редактирование прав.
- Работа с structure и page.
7. Выводы
Плагин User Demo Admin решает задачу предоставления ограниченного доступа к административной панели Cotonti с правами только на чтение. Благодаря комбинации стандартных прав (R на все объекты, A на админку) и дополнительной блокировки операций записи через глобальный хук, он обеспечивает приемлемый уровень безопасности для демонстрационных целей.
Тем не менее, из-за архитектурных особенностей Cotonti (многие админские скрипты проверяют лишь наличие права A) полностью гарантировать невозможность записи штатными средствами сложно. Поэтому плагин следует использовать с осторожностью и только для доверенных пользователей.
При необходимости плагин легко расширить, добавив дополнительные проверки, логирование или интеграцию с другими системами. Документация и структура кода позволяют разработчику быстро адаптировать его под свои нужды.
Купить User Demo Admin - безопасная демонстрация админ-панели Cotonti. по низким ценам. Интернет-магазин предлагает заказать User Demo Admin - безопасная демонстрация админ-панели Cotonti., просмотреть полное описание, детальные характеристики, фото товара и актуальные цены со скидками