• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/integration/sign/access/service/rolepermissionservice.php
  • Класс: Bitrix\Crm\Integration\Sign\Access\Service\RolePermissionService
  • Вызов: RolePermissionService::saveRolePermissions
public function saveRolePermissions(array &$permissionSettings): void
{
	foreach ($permissionSettings as &$setting)
	{
		$roleId = (int) ($setting['id'] ?? 0);
		$roleTitle = (string) ($setting['title'] ?? '');
		$setting['accessRights'] ??= [];
		if($roleId > 0 && !$this->roleRelationService->validateRoleId($roleId))
		{
			continue;
		}
		
		$smartDocumentFactory = Container::getInstance()
			->getFactory(CCrmOwnerType::SmartDocument);
		
		$categoryFactory = Container::getInstance()
			->getFactory(CCrmOwnerType::Contact);
		
		if (!$smartDocumentFactory || !$categoryFactory)
		{
			continue;
		}
		
		$contactCategoryId = $categoryFactory
			->getCategoryByCode(SmartDocument::CONTACT_CATEGORY_CODE)
			->getId();
		
		$smartDocumentCategory = $smartDocumentFactory
			->getDefaultCategory();
		if (!$smartDocumentCategory)
		{
			continue;
		}

		$smartDocumentCategoryId = $smartDocumentCategory->getId();
		$contactEntityName = CCrmOwnerType::ContactName;
		$smartDocumentEntityName = CCrmOwnerType::SmartDocumentName;
		
		$preparedValues = [];
		foreach([$contactEntityName, $smartDocumentEntityName] as $entity)
		{
			$preparedValues[$entity] = $this->fillPermissionSet($setting, $entity);
		}
		
		$rolePerms[
			$this->getPermissionEntity(CCrmOwnerType::Contact, $contactCategoryId)
		] = $preparedValues[$contactEntityName];
		
		$rolePerms[
			$this->getPermissionEntity(CCrmOwnerType::SmartDocument, $smartDocumentCategoryId)
		] = $preparedValues[$smartDocumentEntityName];

		$fields = [
			'RELATION' => $rolePerms,
			'NAME' => $roleTitle,
			'IS_SYSTEM' => 'Y',
			'GROUP_CODE' => self::ROLE_GROUP_CODE,
		];
		
		if (!$roleId)
		{
			$roleId = (new CCrmRole())->Add($fields);
		}
		else
		{
			(new CCrmRole())->Update($roleId, $fields);
		}
		$setting['id'] = $roleId;
	}
}