Файл admin.rights.php в Cotonti
выполняет роль ядра для административного интерфейса управления правами доступа пользователей и расширений в системе Cotonti.
Основное назначение файла admin.rights.php в системе Cotonti CMF:
Файл admin.rights.php отвечает за управление правами пользователей в административной части системы Cotonti. Он обрабатывает и отображает интерфейс для настройки прав доступа к различным разделам и функциям системы (например, к ядру, модулям и плагинам). Основная цель этого файла — предоставить администратору возможность управлять правами групп пользователей на различные функции, разделы и плагины системы.
Суть содержания кода:
Код в файле admin.rights.php выполняет несколько основных задач:
-
Получение данных о правах доступа: Код делает запросы к базе данных для получения прав доступа для разных групп пользователей. Для этого используется SQL-запрос к таблицам базы данных, где хранятся данные о правах пользователей, а также о модулях, плагинах и структуре.
-
Парсинг и вывод данных: На основе полученных данных генерируются строки для отображения в шаблоне. Каждая строка прав включает:
- Название и описание секции (например, модуль или плагин).
- Чекбоксы для изменения прав доступа.
- Возможность изменения прав для различных уровней доступа (чтение, запись, администрирование).
-
Работа с шаблонами: Шаблонные переменные (например, права доступа, ссылки и иконки) заполняются и передаются в шаблон для отображения. Используются функции и механизмы шаблонной системы для правильного отображения этих данных в административном интерфейсе.
-
Управление правами для плагинов, структуры и модулей: Присутствует логика для отображения прав для каждого модуля, структуры, плагина с возможностью изменения этих прав через административный интерфейс.
-
Обработка дополнительных расширений: Код поддерживает работу с расширениями системы через плагины, что позволяет администратору гибко управлять доступами к функционалу плагинов.
Список используемых функций/методов:
-
cot_getextplugins()- Назначение: Возвращает список подключенных плагинов для заданной точки расширения.
- Использование: Это функция позволяет подключать дополнительные файлы плагинов, которые могут быть использованы в процессе обработки прав.
-
cot_url()- Назначение: Формирует URL для различных административных страниц.
- Использование: Эта функция используется для создания ссылок на страницы управления правами, пользователями и модулями.
-
cot_langfile()- Назначение: Загружает языковой файл для модуля.
- Использование: Загружает языковые строки для модулей, что позволяет выводить интерфейс на соответствующем языке.
-
cot_selectbox_groups()- Назначение: Создает выпадающий список для выбора групп пользователей.
- Использование: Это позволяет отображать и выбирать группы пользователей при настройке прав.
-
cot_checkbox()- Назначение: Генерирует HTML-код для чекбокса.
- Использование: Используется для отображения чекбоксов для прав доступа (например, чтение, запись).
-
cot_rights_parseline()- Назначение: Обрабатывает и генерирует строку для отображения прав доступа в административной панели.
- Использование: Отображает строку с правами для конкретного элемента, генерирует HTML для отображения в шаблоне.
-
cot_build_user()- Назначение: Строит отображение пользователя на основе его ID и имени.
- Использование: Используется для отображения информации о пользователе, который установил или изменил права.
-
cot_display_messages()- Назначение: Отображает сообщения (например, об ошибках или успешных операциях).
- Использование: Используется для отображения сообщений в админке, таких как уведомления о применении прав.
-
cot_get_extensionparams()- Назначение: Получает параметры для расширений.
- Использование: Используется для получения данных о модулях и плагинах, таких как иконки и их название.
Взаимодействие с классами и объектами:
-
Классы:
Cot::$db: Класс, взаимодействующий с базой данных для выполнения запросов.Cot::$cfg: Класс для доступа к конфигурационным данным, например, для проверки включенного режима совместимости.Cot::$L: Объект для работы с языковыми строками, который используется для перевода.Cot::$out: Объект, через который передаются данные в шаблон.
-
Объекты:
$t: Объект для работы с шаблонами, через который передаются данные для отображения на страницах административного интерфейса.$extPrams: Ассоциативный массив, содержащий параметры для модулей и плагинов.
Эти объекты играют ключевую роль в обработке данных, которые выводятся в интерфейс и позволяют взаимодействовать с базой данных, конфигурацией и шаблонами.
Стиль PHP:
Код использует объектно-ориентированный стиль программирования (например, использование статических свойств в классах Cot::$db, Cot::$L), а также элементы функционального подхода (например, использование функций типа cot_url(), cot_checkbox()). Шаблонная система также активно используется для разделения логики и отображения данных.
- Функции: Код активно использует функции для обработки данных и генерации HTML-форм.
- Статические свойства и методы: Для работы с базой данных и конфигурацией используются статические методы и свойства классов.
- Массивы: Активно используются ассоциативные массивы для хранения параметров, например, для расширений или прав доступа.
- Шаблонный движок: Является важной частью кода, поскольку большая часть вывода данных в админку производится через шаблоны.
Код также применяет обработку ошибок и совместимость с устаревшими версиями системы через механизмы флагов, таких как legacyMode.
Заключение:
Этот файл выполняет роль ядра для административного интерфейса управления правами доступа в системе Cotonti. Он взаимодействует с базой данных, обрабатывает данные прав и отображает их в интерфейсе с возможностью изменения. Взаимодействие с другими компонентами системы осуществляется через статические свойства классов и функции, что делает код гибким и удобным для расширения и кастомизации.
находится по адресу: /system/admin/admin.rights.php движка php-фреймворка Cotonti.
<?php
/**
* Administration panel - Rights editor
*
* @package Cotonti
* @copyright (c) Cotonti Team
* @license https://github.com/Cotonti/Cotonti/blob/master/License.txt
*
* @todo don't update locked elements. Don't use form elements for them.
*/
(defined('COT_CODE') && defined('COT_ADMIN')) or die('Wrong URL.'); // Проверка, что файл был вызван из правильного контекста (внутри движка Cotonti и в административной панели)
list(Cot::$usr['auth_read'], Cot::$usr['auth_write'], Cot::$usr['isadmin']) = cot_auth('users', 'a'); // Получаем права пользователя для группы 'users'
Cot::$usr['isadmin'] &= cot_auth('admin', 'a', 'A'); // Проверка, является ли пользователь администратором для группы 'admin'
if (Cot::$usr['maingrp'] == COT_GROUP_SUPERADMINS) { // Если пользователь является супер-администратором
Cot::$usr['auth_read'] = true; // Разрешаем чтение
Cot::$usr['auth_write'] = true; // Разрешаем запись
Cot::$usr['isadmin'] = true; // Пользователь имеет права администратора
}
cot_block(Cot::$usr['isadmin']); // Проверка прав пользователя (прерывание выполнения, если нет прав администратора)
$t = new XTemplate(cot_tplfile('admin.rights', 'core')); // Инициализация шаблонизатора XTemplate для использования шаблона 'admin.rights'
$g = cot_import('g', 'G', 'INT'); // Получаем значение параметра 'g' (идентификатор группы) из GET-запроса
$advanced = cot_import('advanced', 'G', 'BOL'); // Получаем значение параметра 'advanced' (флаг для режима расширенных настроек) из GET-запроса
if (!$g) { // Если параметр 'g' не передан (группа не указана)
cot_error(Cot::$L['users_group_not_found']); // Выводим ошибку "Группа не найдена"
cot_redirect(cot_url('admin', ['m' => 'users'], '', true)); // Перенаправляем на страницу пользователей
}
$group = Cot::$db->query('SELECT * FROM ' . Cot::$db->groups . ' WHERE grp_id = ?', $g)->fetch(); // Получаем информацию о группе из базы данных по id группы
if (!$group) { // Если группа не найдена
cot_error(Cot::$L['users_group_not_found']); // Выводим ошибку "Группа не найдена"
cot_redirect(cot_url('admin', ['m' => 'users'], '', true)); // Перенаправляем на страницу пользователей
}
// Check if the group is rightless
if ($group['grp_skiprights'] > 0) { // Если группа имеет флаг пропуска прав (группа не имеет прав)
cot_error("«{$group['grp_name']}». ".Cot::$L['adm_group_has_no_rights']); // Выводим ошибку, что группа не имеет прав
cot_redirect(cot_url('admin', ['m' => 'users'], '', true)); // Перенаправляем на страницу пользователей
}
/* === Hook === */
foreach (cot_getextplugins('admin.rights.first') as $pl) { // Подключаем плагины, если они есть для этого хука
include $pl; // Включаем каждый найденный плагин
}
/* ===== */
Этот участок кода занимается валидацией и подготовкой информации о правках для конкретной группы пользователей в панели администратора Cotonti. Код проверяет, имеет ли пользователь достаточно прав для работы с правами других пользователей, загружает данные о группе и проверяет, имеет ли она права, которые могут быть изменены.
if ($a == 'update') { // Если действие равно 'update' (обновление прав)
$ncopyrightsconf = cot_import('ncopyrightsconf', 'P', 'BOL'); // Получаем значение параметра 'ncopyrightsconf' из POST-запроса, булевое значение
$ncopyrightsfrom = cot_import('ncopyrightsfrom', 'P', 'INT'); // Получаем значение параметра 'ncopyrightsfrom' из POST-запроса, целое число
$auth = cot_import('auth', 'P', 'ARR'); // Получаем массив прав 'auth' из POST-запроса
$items = cot_import('items', 'P', 'TXT'); // Получаем строку с параметрами 'items' из POST-запроса
if (!empty($items)) { // Если параметр 'items' не пустой
// Update rights for these items only
$items = json_decode($items, true); // Декодируем JSON-строку в массив
$items = !empty($items) ? $items : []; // Если декодированное значение не пустое, присваиваем его, иначе - пустой массив
} else { // Если параметр 'items' пустой
// Update rights for all items
$items = []; // Инициализируем пустой массив
$sql = Cot::$db->query('SELECT * FROM '. Cot::$db->auth . ' AS a ' .
"WHERE auth_groupid=? ORDER BY auth_option ASC", $g); // Запрос к базе данных для получения всех прав для группы
while ($row = $sql->fetch()) { // Для каждой строки, полученной из базы
$items[$row['auth_code']][$row['auth_option']] = $row['auth_rights']; // Заполняем массив прав
}
}
$urlParams = ['m' => 'rights', 'g' => $g]; // Параметры URL для редиректа (права и группа)
if ($advanced) { // Если активирован флаг 'advanced'
$urlParams['advanced'] = 1; // Добавляем параметр 'advanced' в URL
}
/* === Hook === */
foreach (cot_getextplugins('admin.rights.update') as $pl) { // Подключаем плагины, если они есть для этого хука
include $pl; // Включаем каждый найденный плагин
}
/* ===== */
if ($ncopyrightsconf && !empty($cot_groups[$ncopyrightsfrom]['name']) && $g > 5) { // Если настройки прав корректны, группа существует, и группа имеет id больше 5
Cot::$db->delete(Cot::$db->auth, "auth_groupid=$g"); // Удаляем старые права для группы из базы данных
cot_auth_add_group($g, $ncopyrightsfrom); // Добавляем новые права для группы
cot_auth_clear('all'); // Очищаем кэш прав
cot_message('Added'); // Отправляем сообщение об успешном добавлении прав
cot_log('Added rights for group #' . $g, 'adm', 'user_groups_rights', 'add'); // Логируем добавление прав для группы
cot_redirect(cot_url('admin', $urlParams, '', true)); // Перенаправляем на страницу с правами группы
} elseif (!empty($items) && !empty($auth)) { // Если есть права и элементы для обновления
$mask = []; // Инициализируем массив для хранения маски прав
foreach ($items as $code => $v) { // Для каждого элемента прав
foreach ($v as $option => $oldMaskValue) { // Для каждой опции прав
$newValue = !empty($auth[$code][$option]) && is_array($auth[$code][$option]) ? // Если новые значения прав есть и они в виде массива
$auth[$code][$option] : []; // Присваиваем массив новых значений
$mask = 0; // Инициализируем маску прав
foreach ($newValue as $l => $m) { // Для каждого значения в новых правах
$mask += cot_auth_getvalue($l); // Обновляем маску, суммируя значения
}
$oldRights = Cot::$db->query( // Запрашиваем старые права для конкретного кода и опции
'SELECT auth_id, auth_rights FROM ' . Cot::$db->auth .
" WHERE auth_groupid=? AND auth_code=? AND auth_option=?",
[$g, $code, $option]
)->fetch(); // Получаем старые права из базы
if (!empty($oldRights) && $oldRights['auth_rights'] != $mask) { // Если права изменились
Cot::$db->update( // Обновляем права в базе данных
Cot::$db->auth,
['auth_rights' => $mask, 'auth_setbyuserid' => Cot::$usr['id']], // Новые права и кто их установил
"auth_id=" . $oldRights['auth_id'] // Условие для обновления по id прав
);
}
}
}
cot_auth_reorder(); // Пересчитываем и перерегистрируем права
cot_auth_clear('all'); // Очищаем кэш прав
cot_message('Updated'); // Отправляем сообщение об успешном обновлении прав
cot_log('Updated rights for group #' . $g, 'adm', 'user_groups_rights', 'update'); // Логируем обновление прав для группы
cot_redirect(cot_url('admin', $urlParams, '', true)); // Перенаправляем на страницу с правами группы
}
}
$jj = 1; // Инициализация переменной $jj значением 1
/* === Hook for the plugins === */
foreach (cot_getextplugins('admin.rights.main') as $pl) { // Для каждого плагина, подключаемого по хуку 'admin.rights.main'
include $pl; // Включаем плагин
}
/* ===== */
$adminPath[] = [cot_url('admin', 'm=users'), Cot::$L['Users']]; // Добавляем в хлебные крошки ссылку на страницу пользователей
$adminPath[] = [cot_url('admin', 'm=users&n=edit&g='.$g), $cot_groups[$g]['name']]; // Добавляем в хлебные крошки ссылку на страницу редактирования группы
$adminPath[] = [cot_url('admin', 'm=rights&g='.$g), Cot::$L['Rights']]; // Добавляем в хлебные крошки ссылку на страницу прав для группы
if ($advanced) { // Если включен режим расширенных настроек
$adminPath[] = [cot_url('admin', 'm=rights&g=' . $g . '&advanced=1'), Cot::$L['More']]; // Добавляем в хлебные крошки ссылку на расширенные права
}
$adminTitle = Cot::$L['Rights']; // Устанавливаем заголовок страницы "Права"
$adv_columns = ($advanced) ? 8 : 4; // Если режим расширенных прав, устанавливаем количество колонок = 8, иначе 4
$urlParams = ['m' => 'rights', 'g' => $g, 'a' => 'update',]; // Параметры URL для обновления прав
if ($advanced) { // Если включен режим расширенных прав
$urlParams['advanced'] = 1; // Добавляем параметр 'advanced' в URL
}
// Preload module langfiles
foreach ($cot_modules as $code => $mod) { // Для каждого модуля в системе
if (file_exists(cot_langfile($code, 'module'))) { // Если существует файл языка для этого модуля
require_once cot_langfile($code, 'module'); // Подключаем файл языка модуля
}
}
// Common tags
$t->assign([ // Присваиваем общие теги в шаблон
'ADMIN_RIGHTS_ADV_COLUMNS' => $adv_columns, // Количество колонок для расширенного режима
'ADMIN_RIGHTS_4ADV_COLUMNS' => 4 + $adv_columns // Количество колонок для обычного и расширенного режимов
]);
// All items that are present in rights edit form
$items = []; // Инициализируем массив для элементов прав
$extPrams = []; // Инициализируем массив для параметров плагинов
// The core and modules top-level
$sql = Cot::$db->query('SELECT a.*, u.user_name FROM ' . Cot::$db->auth . ' AS a ' .
'LEFT JOIN ' . Cot::$db->core . ' AS c ON c.ct_code=a.auth_code ' . // Выполняем запрос к базе данных для получения прав и пользователей
'LEFT JOIN ' . Cot::$db->users . ' AS u ON u.user_id=a.auth_setbyuserid ' . // Выполняем запрос для получения имени пользователя, установившего права
"WHERE auth_groupid=? AND auth_option = 'a' AND (c.ct_plug = 0 || c.ct_plug IS NULL) " . // Фильтруем по группе и опции
'ORDER BY auth_code ASC', $g); // Сортируем по коду прав
while ($row = $sql->fetch()) { // Для каждой строки результата запроса
// @deprecated
$legacyIcon = null; // Инициализация переменной для старой иконки
if (isset(Cot::$cfg['legacyMode']) && Cot::$cfg['legacyMode']) { // Если активирован старый режим
/** @deprecated For backward compatibility. Will be removed in future releases */
$legacyIcon = ''; // Устанавливаем старую иконку (устаревший функционал)
}
$ico = ''; // Инициализация переменной для иконки
if ($row['auth_code'] == 'admin') { // Если код авторизации равен 'admin'
$link = cot_url($row['auth_code']); // Ссылка на страницу администрирования
$title = Cot::$L['Administration']; // Заголовок "Администрирование"
} elseif ($row['auth_code'] == 'message') { // Если код авторизации равен 'message'
$link = '#'; // Ссылка не указывает на другую страницу
$title = Cot::$L['Messages']; // Заголовок "Сообщения"
} elseif ($row['auth_code'] == 'structure') { // Если код авторизации равен 'structure'
$link = '#'; // Ссылка не указывает на другую страницу
$title = Cot::$L['Structure']; // Заголовок "Структура"
} else { // Если это модуль
// Module
$link = cot_url('admin', "m=extensions&a=details&mod=".$row['auth_code']); // Ссылка на детали модуля
$extPrams[$row['auth_code']] = cot_get_extensionparams($row['auth_code'], true); // Получение параметров расширения
$title = $extPrams[$row['auth_code']]['name']; // Название модуля
$ico = $extPrams[$row['auth_code']]['icon']; // Иконка модуля
if (isset(Cot::$cfg['legacyMode']) && Cot::$cfg['legacyMode']) { // Если активирован старый режим
$legacyIcon = $extPrams[$row['auth_code']]['legacyIcon']; // Использование старой иконки
}
}
cot_rights_parseline($row, $title, $link, $ico, $legacyIcon); // Вызов функции для обработки прав доступа
}
$sql->closeCursor(); // Закрытие курсора результата запроса
$t->assign('RIGHTS_SECTION_TITLE', Cot::$L['Core'] . ' & ' . Cot::$L['Modules']); // Установка заголовка для раздела прав
$t->parse('MAIN.RIGHTS_SECTION'); // Разбор и вывод шаблона для секции прав
$area = ''; // Инициализация переменной для области структуры
// Permissions for structure
$sql = Cot::$db->query('SELECT a.*, u.user_name, s.structure_path, s.structure_area ' .
'FROM ' . Cot::$db->structure . ' AS s ' .
'LEFT JOIN ' . Cot::$db->auth . ' AS a ON s.structure_code=a.auth_option AND s.structure_area=a.auth_code ' .
'LEFT JOIN ' . Cot::$db->users . ' AS u ON a.auth_setbyuserid=u.user_id ' .
"WHERE a.auth_groupid=? AND a.auth_option != 'a' " .
'ORDER BY s.structure_area ASC, s.structure_path ASC', $g); // Запрос для получения прав доступа на структуру
while ($row = $sql->fetch()) { // Для каждой строки результата запроса
if (!empty($area) && $area != $row['structure_area']) { // Если область изменена
$t->assign( // Присваиваем заголовок для текущего раздела прав
'RIGHTS_SECTION_TITLE',
Cot::$L['Module'] . ' ' . $cot_modules[$area]['title'] . ' ' . mb_strtolower(Cot::$L['Structure'])
);
$t->parse('MAIN.RIGHTS_SECTION'); // Разбираем шаблон для текущего раздела
}
$area = $row['structure_area']; // Обновляем область
$link = cot_url('admin', 'm=structure&n='.$area.'&al='.$row['auth_option']); // Ссылка на страницу структуры
$title = !empty(Cot::$structure[$row['structure_area']][$row['auth_option']]['tpath']) ? // Если есть путь, используем его
Cot::$structure[$row['structure_area']][$row['auth_option']]['tpath'] : $row['structure_area']; // Иначе используем область
if (empty($extPrams[$area])) { // Если параметры расширения еще не загружены
$extPrams[$area] = cot_get_extensionparams($area, true); // Загружаем параметры расширения для области
}
// @deprecated
$legacyIcon = null; // Инициализация устаревшей иконки
if (isset(Cot::$cfg['legacyMode']) && Cot::$cfg['legacyMode']) { // Если активирован старый режим
$legacyIcon = $extPrams[$area]['legacyIcon']; // Используем старую иконку
}
cot_rights_parseline($row, $title, $link, $extPrams[$area]['icon'], $legacyIcon); // Обработка строки прав
}
if (!empty($area)) { // Если область существует
$t->assign( // Присваиваем заголовок для текущего раздела прав
'RIGHTS_SECTION_TITLE',
Cot::$L['Module'].' '.$cot_modules[$area]['title'].' '.mb_strtolower(Cot::$L['Structure']));
$t->parse('MAIN.RIGHTS_SECTION'); // Разбираем шаблон для текущего раздела
}
$sql->closeCursor(); // Закрываем курсор запроса
// Plugin permissions
$sql = Cot::$db->query('SELECT a.*, u.user_name FROM '. Cot::$db->auth . ' AS a ' .
'LEFT JOIN ' . Cot::$db->users . ' AS u ON u.user_id=a.auth_setbyuserid ' .
"WHERE auth_groupid=? AND auth_code='plug' ".
'ORDER BY auth_option ASC', $g); // Запрос для получения прав доступа для плагинов
while ($row = $sql->fetch()) { // Для каждой строки результата запроса
$link = cot_url('admin', 'm=extensions&a=details&pl='.$row['auth_option']); // Ссылка на страницу плагина
$key = 'plug_' . $row['auth_option']; // Ключ для плагина
$extPrams[$key] = cot_get_extensionparams($row['auth_option'], false); // Загружаем параметры плагина
// @deprecated
$legacyIcon = null; // Инициализация устаревшей иконки
if (isset(Cot::$cfg['legacyMode']) && Cot::$cfg['legacyMode']) { // Если активирован старый режим
$legacyIcon = $extPrams[$key]['legacyIcon']; // Используем старую иконку
}
cot_rights_parseline($row, $extPrams[$key]['name'], $link, $extPrams[$key]['icon'], $legacyIcon); // Обработка строки прав
}
$sql->closeCursor(); // Закрываем курсор запроса
$t->assign('RIGHTS_SECTION_TITLE', Cot::$L['Plugins']); // Присваиваем заголовок для секции плагинов
$t->parse('MAIN.RIGHTS_SECTION'); // Разбираем шаблон для секции плагинов
/* === Hook for the plugins === */
foreach (cot_getextplugins('admin.rights.end') as $pl) { // Подключаем плагины для конца секции прав
include $pl; // Подключаем каждый плагин
}
/* ===== */
cot_display_messages($t); // Отображаем сообщения на странице
$t->assign([ // Присваиваем значения для шаблона
'ADMIN_RIGHTS_FORM_URL' => cot_url('admin', $urlParams), // URL для формы прав
'ADMIN_RIGHTS_FORM_ITEMS' => '', // Права для всех элементов
'ADMIN_RIGHTS_ADVANCED_URL' => cot_url('admin', 'm=rights&g=' . $g . '&advanced=1'), // URL для расширенной версии прав
'ADMIN_RIGHTS_SELECTBOX_GROUPS' => cot_selectbox_groups(4, 'ncopyrightsfrom', ['5', $g]), // Селектор групп пользователей
]);
/* === Hook === */
foreach (cot_getextplugins('admin.rights.tags') as $pl) { // Подключаем плагины для прав
include $pl; // Подключаем каждый плагин
}
/* ===== */
$t->parse('MAIN'); // Разбираем основной шаблон
$adminMain = $t->text('MAIN'); // Сохраняем разобранный шаблон в переменную
$t->parse('RIGHTS_HELP'); // Разбираем шаблон помощи для прав
$adminHelp = $t->text('RIGHTS_HELP'); // Сохраняем разобранный шаблон помощи
/**
* @param array $row
* @param string $title
* @param string $link
* @param string $icon
* @param string $legacyIcon deprecated. For backward compatibility. Will be removed in future releases
* @return void
*/
function cot_rights_parseline($row, $title, $link, $icon = '', $legacyIcon = '')
{
global $L, $advanced, $t, $out;
$mn['R'] = 1; // Определяем права для чтения
$mn['W'] = 2; // Определяем права для записи
$mn['1'] = 4; // Определяем дополнительное право
if ($advanced) {
$mn['2'] = 8; // Для расширенных прав
$mn['3'] = 16;
$mn['4'] = 32;
$mn['5'] = 64;
} else {
$rv['2'] = 8; // Для обычных прав
$rv['3'] = 16;
$rv['4'] = 32;
$rv['5'] = 64;
}
$mn['A'] = 128; // Определяем дополнительные права
foreach ($mn as $code => $value) { // Для каждого значения прав
$state[$code] = (($row['auth_rights'] & $value) == $value) ? true : false; // Определяем, включены ли права
$locked[$code] = (($row['auth_rights_lock'] & $value) == $value) ? true : false; // Определяем, заблокированы ли права
// Deprecated. Use tags instead
Cot::$out['tpl_rights_parseline_locked'] = $locked[$code]; // Присваиваем значение для заблокированных прав
Cot::$out['tpl_rights_parseline_state'] = $state[$code]; // Присваиваем значение для активных прав
$attributes = [];
if ($locked[$code]) { // Если права заблокированы
$attributes['disabled'] = 'disabled'; // Устанавливаем атрибут disabled
}
$formName = 'auth[' . $row['auth_code'] . '][' . $row['auth_option'] . '][' . $code . ']'; // Формируем имя поля для формы
$t->assign([ // Присваиваем данные для шаблона
'ADMIN_RIGHTS_ROW_ITEMS_CHECK' => cot_checkbox($state[$code], $formName, '', $attributes), // Генерируем чекбокс для прав
'ADMIN_RIGHTS_ROW_ITEMS_NAME' => $formName, // Имя поля
'ADMIN_RIGHTS_ROW_ITEMS_CHECKED' => ($state[$code]) ? " checked=\"checked\"" : '', // Если права активированы, помечаем чекбокс как выбранный
'ADMIN_RIGHTS_ROW_ITEMS_DISABLED' => ($locked[$code]) ? " disabled=\"disabled\"" : '', // Если права заблокированы, устанавливаем атрибут disabled
'ADMIN_RIGHTS_ROW_ITEMS_LOCKED' => $locked[$code], // Статус блокировки прав
'ADMIN_RIGHTS_ROW_ITEMS_STATE' => $state[$code], // Статус активации прав
]);
$t->parse('MAIN.RIGHTS_SECTION.RIGHTS_ROW.RIGHTS_ROW_ITEMS'); // Разбираем шаблон для строки прав
}
if (!$advanced) { // Если не в расширенном режиме
$preserve = '';
foreach ($rv as $code => $value) { // Для каждого обычного права
if (($row['auth_rights'] & $value) == $value) { // Если право активировано
$preserve .= '<input type="hidden" name="auth['.$row['auth_code'].']['.$row['auth_option'].']['.$code.']" value="1" />'; // Добавляем скрытое поле для сохранения состояния
}
}
$t->assign('ADMIN_RIGHTS_ROW_PRESERVE', $preserve); // Присваиваем скрытые поля в шаблон
}
if (isset(Cot::$cfg['legacyMode']) && Cot::$cfg['legacyMode']) { // Проверяем, если включен режим совместимости
$legacyIcon = (!empty($legacyIcon) && file_exists($legacyIcon)) ? $legacyIcon : ''; // Применяем иконку совместимости, если она существует
}
$row['user_name'] = !empty($row['user_name']) ? $row['user_name'] : 'ID#: ' . $row['auth_setbyuserid']; // Устанавливаем имя пользователя, если оно есть, иначе показываем ID
$t->assign([ // Присваиваем данные для шаблона
'ADMIN_RIGHTS_ROW_AUTH_CODE' => $row['auth_code'], // Код прав
'ADMIN_RIGHTS_ROW_TITLE' => $title, // Заголовок
'ADMIN_RIGHTS_ROW_LINK' => $link, // Ссылка
'ADMIN_RIGHTS_ROW_ICON' => $icon, // Иконка
'ADMIN_RIGHTS_ROW_RIGHTSBYITEM' => cot_url('admin', 'm=rightsbyitem&ic='.$row['auth_code'].'&io='.$row['auth_option']), // Ссылка на подробности по правам
'ADMIN_RIGHTS_ROW_USER' => cot_build_user($row['auth_setbyuserid'], $row['user_name']), // Создаем пользователя для отображения
]);
if (isset(Cot::$cfg['legacyMode']) && Cot::$cfg['legacyMode']) { // Если включен режим совместимости
$t->assign([ // Присваиваем иконку для совместимости
'ADMIN_RIGHTS_ROW_ICO' => $legacyIcon,
]);
}
$t->parse('MAIN.RIGHTS_SECTION.RIGHTS_ROW'); // Разбираем шаблон строки прав
}
Комментарии (0)
Автор контента
Оффлайн
Administrator
Последняя авторизация: 05.07.2026 18:32
- Страница размещена: 28.01.2025 18:49
- Последнее обновление: 28.01.2025 19:06