Компонент BX.UI.AccessRights
Из коробки предоставляется компонент, обеспечивающий отрисовку таблицы с настройкой прав доступа: BX.UI.AccessRights.
Для работы этого компонента требуется инициализация системного компонента bitrix:main.ui.selector, который обеспечивает выбор сотрудников для привязки к ролям.
Компонент обеспечивает решение двух проблем:
- Отрисовку существующих настроек;
- Сохранение изменений в настройках.
Для отрисовки необходимо передать два параметра:
- userGroups - роли, разрешения и привязанные пользователи
[ 'id' => 1, // id роли, для новых - 0 'title' => 'Менеджер', // название роли 'accessRights' => [ // список прав и значений 0 => [ 'id' => 1, // id, соответствует константам в PermissionDictionary 'value' => 0 ] ], 'members' => [ // список участников в роли 'U2' => [ // access code участника 'type' => 'users', // тип для JS, доступные описаны в main/install/components/bitrix/main.ui.selector/templates/.default/script.js 'id' => 2, 'name' => 'Test User', 'url' => '', 'avatar' => null ] ] ]
- accessRights - настройки, разбитые по секциям
[ 0 => [ 'sectionTitle' => 'Задачи', // название секции 'rights' => [ // список прав 0 => [ 'id' => 1, // id, соответствует PermissionDictionary 'type' => 'toggler', // тип, на текущий момент только toggler - переключатель 'title' => 'Редактирование', // название 'hint' => null // если задано, то будет выведена иконка с подсказкой ] ] ] ]
Для сохранения изменений компонент формирует стандартный ajax запрос с данными. В качестве адреса использует имя целевого компонента и название действия (по умолчанию используются save, delete, load).
Целиком вызов компонента будет выглядеть следующим образом:
<?php \Bitrix\Main\Loader::includeModule('ui'); \Bitrix\Main\UI\Extension::load(['ui.buttons', 'ui.icons', 'ui.notification', 'ui.accessrights']); ?> <span id="bx-access-group"></span> <? $APPLICATION->IncludeComponent( "bitrix:main.ui.selector", ".default", [ 'API_VERSION' => 3, 'ID' => 'bx-access-group', // заменить на свое 'BIND_ID' => 'bx-access-group', // заменить на свое 'ITEMS_SELECTED' => [], 'CALLBACK' => [ 'select' => "AccessRights.onMemberSelect", 'unSelect' => "AccessRights.onMemberUnselect", 'openDialog' => 'function(){}', 'closeDialog' => 'function(){}', ], 'OPTIONS' => [ 'eventInit' => 'tasks:onComponentLoad', // заменить на свое 'eventOpen' => 'tasks:onComponentOpen', // заменить на свое 'useContainer' => 'Y', 'lazyLoad' => 'Y', 'context' => 'TASKS_PERMISSION', 'contextCode' => '', 'useSearch' => 'Y', 'useClientDatabase' => 'Y', 'allowEmailInvitation' => 'N', 'enableAll' => 'N', 'enableUsers' => 'Y', 'enableDepartments' => 'Y', 'enableGroups' => 'Y', 'departmentSelectDisable' => 'N', 'allowAddUser' => 'Y', 'allowAddCrmContact' => 'N', 'allowAddSocNetGroup' => 'N', 'allowSearchEmailUsers' => 'N', 'allowSearchCrmEmailUsers' => 'N', 'allowSearchNetworkUsers' => 'N', 'useNewCallback' => 'Y', 'multiple' => 'Y', 'enableSonetgroups' => 'Y', 'showVacations' => 'Y', ] ], false, ["HIDE_ICONS" => "Y"] ); ?> <div id="bx-config-permissions"></div> <script> let AccessRights = new BX.UI.AccessRights({ component: 'bitrix:tasks.config.permissions', actionSave: 'save', actionDelete: 'delete', renderTo: document.getElementById('bx-config-permissions'), userGroups: <?= CUtil::PhpToJSObject($arResult['USER_GROUPS']) ?>, accessRights: <?= CUtil::PhpToJSObject($arResult['ACCESS_RIGHTS']); ?>, initPopupEvent: '<?= $initPopupEvent ?>', openPopupEvent: '<?= $openPopupEvent ?>', popupContainer: '<?= $componentId ?>', }); AccessRights.draw(); setTimeout(function(){ BX.onCustomEvent('<?= $initPopupEvent ?>', [{openDialogWhenInit: false}]) }, 1000); </script> <?php $APPLICATION->IncludeComponent('bitrix:ui.button.panel', '', [ 'HIDE' => true, 'BUTTONS' => [ [ 'TYPE' => 'save', 'ONCLICK' => 'AccessRights.sendActionRequest()', ], [ 'TYPE' => 'cancel', 'ONCLICK' => 'AccessRights.fireEventReset()' ], ], ]); ?>
Отрисовка иконок, причастных к ролям
Для отрисовки иконок пользователей, групп и тд, привязанных к конкретной роли используется класс \Bitrix\Main\UI\AccessRights\DataProvider.
(new DataProvider())→getEntity($type, $id);
- вернет всю необходимую для UI информацию по указанному типу и id сущности.