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