• Модуль: sender
  • Путь к файлу: ~/bitrix/modules/sender/lib/access/service/rolepermissionservice.php
  • Класс: Bitrix\Sender\Access\Service\RolePermissionService
  • Вызов: RolePermissionService::saveRolePermissions
public function saveRolePermissions(array &$permissionSettings, int $dealCategoryId = -1): void
{
	$query = [];
	$roles = [];

	foreach ($permissionSettings as &$setting)
	{

		$roleId = (int) $setting['id'];
		$roleTitle = (string) $setting['title'];

		$roleId = $this->saveRole($roleTitle, $dealCategoryId, $roleId);
		$setting['id'] = $roleId;
		$roles[] = $roleId;

		if(!isset($setting['accessRights']))
		{
			continue;
		}

		foreach ($setting['accessRights'] as $permission)
		{
			if((int)$permission['id'] < 1)
			{
				continue;
			}

			$query[] = sprintf(
				'(%d, %d, %d)',
				$roleId,
				(int)$permission['id'],
				$permission['value']
			);
		}
	}

	if($query)
	{
		if (!PermissionTable::deleteList(["=ROLE_ID" =>$roles]))
		{
			throw new SqlQueryException(Loc::getMessage(self::DB_ERROR_KEY));
		}

		try
		{
			RoleUtil::insertPermissions($query);
			if (\Bitrix\Main\Loader::includeModule("intranet"))
			{
				\CIntranetUtils::clearMenuCache();
			}
		} catch (\Exception $e)
		{
			throw new SqlQueryException(self::DB_ERROR_KEY);
		}
	}
}