Права в модуле
Права на модуль настраивается в настройках модуля во вкладке Доступ
:
В настройках модуля, форма с управлением правами выводится через код:
options.php// завершает предыдущую закладку, если она есть, начинает следующую
$tabControl->BeginNextTab();
// выводим форму управления правами в настройках текущего модуля
require_once($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/admin/group_rights.php');
Для примера, полный код будет следующий для вывода настройки прав в новом табе:
options.php<?
use Bitrix\Main\Localization\Loc;
use Bitrix\Main\HttpApplication;
use Bitrix\Main\Loader;
use Bitrix\Main\Config\Option;
use Moysklad\Sitemap\Initialization;
// подключение ланговых файлов
Loc::loadMessages(__FILE__);
// получаем id модуля
$request = HttpApplication::getInstance()->getContext()->getRequest();
$module_id = htmlspecialcharsbx($request["mid"] != "" ? $request["mid"] : $request["id"]);
// проверка прав
global $APPLICATION;
if ($APPLICATION->GetGroupRight($module_id) == 'D') {
$APPLICATION->AuthForm(Loc::getMessage('ACCESS_DENIED'));
}
// подключение модуля
Loader::includeModule($module_id);
// настройки модуля для админки в том числе значения по умолчанию
$aTabs = array(
array(
// значение будет вставленно во все элементы вкладки для идентификации
"DIV" => "edit1",
// название вкладки в табах
"TAB" => "Настройка модуля",
// массив с опциями секции
"OPTIONS" => array(
"Страницы",
array(
// имя элемента формы
"moysklad_sitemap_url",
// поясняющий текст
"Укажите с новой строки адреса страниц",
// значение text по умолчанию
"",
// тип элемента формы
array("textarea", 20, 50)
),
"Инфоблоки",
array(
// имя элемента формы
"moysklad_sitemap_id_infobloka",
// поясняющий текст
"Укажите с новой строки ID инфоблока",
// значение text по умолчанию
"",
// тип элемента формы
array("textarea", 20, 50)
),
"Исключения",
array(
// имя элемента формы
"moysklad_sitemap_exceptions",
// поясняющий текст
"Укажите с новой строки URL для исключений",
// значение text по умолчанию
"",
// тип элемента формы
array("textarea", 20, 50)
),
"Название файла",
array(
// имя элемента формы
"moysklad_sitemap_file_name",
// поясняющий текст
"Укажите название файла",
// значение text по умолчанию
"",
// тип элемента формы
array("text", 50)
),
)
),
array(
// значение будет вставленно во все элементы вкладки для идентификации
"DIV" => "edit2",
// название вкладки в табах
"TAB" => "Настройка прав",
)
);
// проверяем текущий POST запрос и сохраняем выбранные пользователем настройки
if ($request->isPost() && check_bitrix_sessid()) {
foreach ($aTabs as $aTab) {
foreach ($aTab['OPTIONS'] as $arOption) {
// если это название секции, переходим к следующий итерации цикла
if (!is_array($arOption)) {
continue;
}
// Проверяем POST запрос, если инициатором выступила кнопка с name="Update" сохраняем введенные настройки в базу данных
if ($request["Update"]) {
// получаем в переменную $optionValue введенные пользователем данные
$optionValue = $request->getPost($arOption[0]);
// устанавливаем выбранные значения параметров и сохраняем в базу данных, перед сохранением проверяем если массив то соединяем данные, если не массив сохраняем как есть
Option::set($module_id, $arOption[0], $optionValue);
}
// Проверяем POST запрос, если инициатором выступила кнопка с name="exchange" запускаем принудительный обмен
if ($request["exchange"]) {
Initialization::main();
}
}
}
}
// отрисовываем форму, для этого создаем новый экземпляр класса CAdminTabControl, куда и передаём массив с настройками
$tabControl = new CAdminTabControl(
"tabControl",
$aTabs
);
// отображаем заголовки закладок
$tabControl->Begin();
?>
<form action="<? echo ($APPLICATION->GetCurPage()); ?>?mid=<? echo ($module_id); ?>&lang=<? echo (LANG); ?>" method="post">
<? foreach ($aTabs as $aTab) {
if ($aTab["OPTIONS"]) {
// завершает предыдущую закладку, если она есть, начинает следующую
$tabControl->BeginNextTab();
// отрисовываем форму из массива
__AdmSettingsDrawList($module_id, $aTab["OPTIONS"]);
}
}
// завершает предыдущую закладку, если она есть, начинает следующую
$tabControl->BeginNextTab();
// выводим форму управления правами в настройках текущего модуля
require_once($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/admin/group_rights.php');
// выводит стандартные кнопки отправки формы
$tabControl->Buttons();
// выводим скрытый input с идентификатором сессии
echo (bitrix_sessid_post()); ?>
<input class="adm-btn-save" type="submit" name="exchange" value="Принудительная генерация" />
<input type="submit" name="Update" value="Сохранить настройки" />
</form>
<?
// обозначаем конец отрисовки формы
$tabControl->End();
В коде нужно обратить внимание на две вещи, иначе права в модуле работать не будут:
name="Update"
именно это название должно быть у кнопки которая сохраняет введенные пользователем данныеLocalRedirect
не должно быть редиректов
Для возможности управления правами из настройки групп, которая находится по пути Настройки -> Пользователи -> Группы пользователей
:
Добавить в файл модуля публичные переменные:
modules/название_модуля/install/index.phppublic $SHOW_SUPER_ADMIN_GROUP_RIGHTS;
public $MODULE_GROUP_RIGHTS;
Добавить в файл модуля в конструктор:
modules/название_модуля/install/index.php// если указано, то на странице прав доступа будут показаны администраторы и группы
$this->SHOW_SUPER_ADMIN_GROUP_RIGHTS = 'Y';
// если указано, то на странице редактирования групп будет отображаться этот модуль
$this->MODULE_GROUP_RIGHTS = 'Y';
Права на модуль текущего пользователя
Узнать права на модуль текущего пользователя можно через метод $APPLICATION->GetGroupRight()
:
$APPLICATION->GetGroupRight('название_модуля');
Метод возвращает код доступа:
W
полный доступR
просмотр данныхD
доступа нет
Ограничить доступ к настройкам модуля:
modules/название_модуля/options.phpglobal $APPLICATION;
if ($APPLICATION->GetGroupRight('название_модуля') == 'D') {
$APPLICATION->AuthForm(Loc::getMessage('ACCESS_DENIED'));
}
Полностью скрыть модуль из админки сайта:
modules/название_модуля/admin/menu.phpglobal $APPLICATION;
if ($APPLICATION->GetGroupRight('название_модуля') == 'D') {
return;
}