- Модуль: 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;
}
}