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

Компонент 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
Наверх