Полный цикл в digital

Права в модуле

Права на модуль настраивается в настройках модуля во вкладке Доступ:

В настройках модуля, форма с управлением правами выводится через код:

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('название_модуля');

Метод возвращает код доступа:

  1. W полный доступ
  2. R просмотр данных
  3. 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;
}
Заполните форму уже сегодня!
Для начала сотрудничества необходимо заполнить заявку или заказать обратный звонок. В ответ получите коммерческое предложение, которое будет содержать индивидуальную стратегию с учетом требований и поставленных задач
Работаем по будням с 9:00 до 18:00. Заявки, отправленные в выходные, обрабатываем в первый рабочий день до 12:00.
Спасибо, ваш запрос принят и будет обработан!
Эйч Маркетинг