• Модуль: catalog
  • Путь к файлу: ~/bitrix/modules/catalog/lib/Access/Permission/Catalog/IblockCatalogPermissionsSaver.php
  • Класс: BitrixCatalogAccessPermissionCatalogIblockCatalogPermissionsSaver
  • Вызов: IblockCatalogPermissionsSaver::convertRightsMode
private function convertRightsMode(int $iblockId, string $mode = IblockTable::RIGHTS_EXTENDED): void
{
	$mode = ($mode === IblockTable::RIGHTS_EXTENDED) ? IblockTable::RIGHTS_EXTENDED : IblockTable::RIGHTS_SIMPLE;
	$currentRightsMode = CIBlock::GetArrayByID($iblockId, 'RIGHTS_MODE');
	if ($currentRightsMode === $mode)
	{
		return;
	}

	if ($mode === IblockTable::RIGHTS_SIMPLE)
	{
		$currentGroup = new CIBlockRights($iblockId);
		$convertGroupRights = [];
		$iblockTaskIds = array_flip(self::getIblockRightsLetterToTaskId());
		foreach ($currentGroup->GetRights() as $group)
		{
			if (!empty($group['GROUP_CODE']) && $group['GROUP_CODE'][0] === 'G')
			{
				$code = (int)mb_substr($group['GROUP_CODE'], 1);
				$isAdminGroup = ($code === 1);
				if ($code && !$isAdminGroup)
				{
					$convertGroupRights[$code] = $iblockTaskIds[$group['TASK_ID']];
				}
			}
		}
	}

	$iblock = new CIBlock();
	$result = $iblock->Update(
		$iblockId,
		[
			'RIGHTS_MODE' => $mode,
			'GROUP_ID' => CIBlock::GetGroupPermissions($iblockId),
		]
	);

	if (!$result)
	{
		throw new SystemException("Cannot change iblock '{$iblockId}' rights mode");
	}

	if ($mode === IblockTable::RIGHTS_SIMPLE && $convertGroupRights)
	{
		CIBlock::SetPermission($iblockId, $convertGroupRights);
	}
}