Файл admin.rights.php в Cotonti

выполняет роль ядра для административного интерфейса управления правами доступа пользователей и расширений в системе Cotonti.

Основное назначение файла admin.rights.php в системе Cotonti CMF:

Файл admin.rights.php отвечает за управление правами пользователей в административной части системы Cotonti. Он обрабатывает и отображает интерфейс для настройки прав доступа к различным разделам и функциям системы (например, к ядру, модулям и плагинам). Основная цель этого файла — предоставить администратору возможность управлять правами групп пользователей на различные функции, разделы и плагины системы.

Суть содержания кода:

Код в файле admin.rights.php выполняет несколько основных задач:

  1. Получение данных о правах доступа: Код делает запросы к базе данных для получения прав доступа для разных групп пользователей. Для этого используется SQL-запрос к таблицам базы данных, где хранятся данные о правах пользователей, а также о модулях, плагинах и структуре.

  2. Парсинг и вывод данных: На основе полученных данных генерируются строки для отображения в шаблоне. Каждая строка прав включает:

    • Название и описание секции (например, модуль или плагин).
    • Чекбоксы для изменения прав доступа.
    • Возможность изменения прав для различных уровней доступа (чтение, запись, администрирование).
  3. Работа с шаблонами: Шаблонные переменные (например, права доступа, ссылки и иконки) заполняются и передаются в шаблон для отображения. Используются функции и механизмы шаблонной системы для правильного отображения этих данных в административном интерфейсе.

  4. Управление правами для плагинов, структуры и модулей: Присутствует логика для отображения прав для каждого модуля, структуры, плагина с возможностью изменения этих прав через административный интерфейс.

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

Список используемых функций/методов:

  1. cot_getextplugins()

    • Назначение: Возвращает список подключенных плагинов для заданной точки расширения.
    • Использование: Это функция позволяет подключать дополнительные файлы плагинов, которые могут быть использованы в процессе обработки прав.
  2. cot_url()

    • Назначение: Формирует URL для различных административных страниц.
    • Использование: Эта функция используется для создания ссылок на страницы управления правами, пользователями и модулями.
  3. cot_langfile()

    • Назначение: Загружает языковой файл для модуля.
    • Использование: Загружает языковые строки для модулей, что позволяет выводить интерфейс на соответствующем языке.
  4. cot_selectbox_groups()

    • Назначение: Создает выпадающий список для выбора групп пользователей.
    • Использование: Это позволяет отображать и выбирать группы пользователей при настройке прав.
  5. cot_checkbox()

    • Назначение: Генерирует HTML-код для чекбокса.
    • Использование: Используется для отображения чекбоксов для прав доступа (например, чтение, запись).
  6. cot_rights_parseline()

    • Назначение: Обрабатывает и генерирует строку для отображения прав доступа в административной панели.
    • Использование: Отображает строку с правами для конкретного элемента, генерирует HTML для отображения в шаблоне.
  7. cot_build_user()

    • Назначение: Строит отображение пользователя на основе его ID и имени.
    • Использование: Используется для отображения информации о пользователе, который установил или изменил права.
  8. cot_display_messages()

    • Назначение: Отображает сообщения (например, об ошибках или успешных операциях).
    • Использование: Используется для отображения сообщений в админке, таких как уведомления о применении прав.
  9. 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'] . ' &amp; ' . 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'); // Разбираем шаблон строки прав
}

 

 

 

 

 

17 минут чтения Administrator

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

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

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

Administrator

Оффлайн

Administrator

Последняя авторизация: 05.07.2026 18:32

  • Страница размещена: 28.01.2025 18:49
  • Последнее обновление: 28.01.2025 19:06

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

Файл admin.cache.disk.php в Cotonti CMF
1 Файл admin.cache.disk.php в движке Cotonti CMF является частью административной панели, предназначенной для управления
Файл admin.cache.php в Cotonti
2 Основное назначение файла: Файл admin.cache.php в движке Cotonti CMF предназначен для управления внутренним кешем
Файл admin.config.php в Cotonti CMF
3 Основное назначение файла и его место в системе Файл admin.config.php является частью административной панели системы
Файл admin.extensions.php в Cotonti CMF
4 Файл "admin.extensions.php" в движке Cotonti CMF является важным компонентом административной части системы,
Файл admin.extrafields.php в Cotonti CMF
5 Файл admin.extrafields.php в движке Cotonti CMF предназначен для управления дополнительными полями (extra fields) в