• Модуль: catalog
  • Путь к файлу: ~/bitrix/modules/catalog/lib/Access/Service/RolePermissionService.php
  • Класс: BitrixCatalogAccessServiceRolePermissionService
  • Вызов: RolePermissionService::appendInventoryManagmentPermissions
public function appendInventoryManagmentPermissions(array $permissionSettings): array
{
	$inventoryManagementPermissions = (new PermissionConfig)->getInventoryManagementPermissions();

	foreach ($permissionSettings as &$setting)
	{
		$roleId = (int)$setting['id'];
		if (!$roleId)
		{
			continue;
		}

		$newRights = $setting['accessRights'] ?? [];
		if (!is_array($newRights))
		{
			throw new SystemException('Parameter `acessRights` must be array');
		}

		$inventoryManagementRights = array_map(
			static function (array $item) {
				return [
					'id' => $item['PERMISSION_ID'],
					'value' => $item['VALUE'],
				];
			},
			$this->getSavedPermissions([
				'filter' => [
					'=ROLE_ID' => $roleId,
					'=PERMISSION_ID' => $inventoryManagementPermissions,
				],
			])
		);

		$diffRights = array_udiff($inventoryManagementRights, $newRights, static function ($a, $b) {
			$a = (string)$a['id'];
			$b = (string)$b['id'];

			return $a <=> $b;
		});
		if (empty($diffRights))
		{
			continue;
		}

		array_push($newRights, ... $diffRights);

		$setting['accessRights'] = $newRights;
	}

	return $permissionSettings;
}