Документация для разработчиков
Темная тема

Компонент BX.UI.AccessRights

Из коробки предоставляется компонент, обеспечивающий отрисовку таблицы с настройкой прав доступа: BX.UI.AccessRights.

Для работы этого компонента требуется инициализация системного компонента bitrix:main.ui.selector, который обеспечивает выбор сотрудников для привязки к ролям.

Компонент обеспечивает решение двух проблем:

  1. Отрисовку существующих настроек;
  2. Сохранение изменений в настройках.

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

  • 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 сущности.



© «Битрикс», 2001-2024, «1С-Битрикс», 2024