- Модуль: catalog
- Путь к файлу: ~/bitrix/modules/catalog/lib/Access/Permission/Catalog/IblockCatalogPermissionsSaver.php
- Класс: BitrixCatalogAccessPermissionCatalogIblockCatalogPermissionsSaver
- Вызов: IblockCatalogPermissionsSaver::saveIblockRight
private function saveIblockRight(int $iblockId, ?int $taskId, array $accessCodes, array $deleteAccessCodes): void
{
if (empty($accessCodes) && empty($deleteAccessCodes))
{
return;
}
$this->convertRightsMode($iblockId);
$usedAccessCodes = [];
$iblockRights = new CIBlockRights($iblockId);
$isNeedResetIblockRights = false;
$rights = $iblockRights->GetRights();
foreach ($rights as $id => &$right)
{
$rightAccessCode = $right['GROUP_CODE'];
if (in_array($rightAccessCode, $deleteAccessCodes, true))
{
unset($rights[$id]);
$isNeedResetIblockRights = true;
continue;
}
if (!in_array($rightAccessCode, $accessCodes, true))
{
continue;
}
$usedAccessCodes[] = $rightAccessCode;
$rightTaskId = (int)$right['TASK_ID'];
if ($rightTaskId !== $taskId)
{
if (empty($taskId))
{
unset($rights[$id]);
}
else
{
$right['TASK_ID'] = $taskId;
}
$isNeedResetIblockRights = true;
}
}
unset($right);
if (!empty($taskId))
{
$i = 0;
$newAccessCodes = array_diff($accessCodes, $usedAccessCodes);
foreach ($newAccessCodes as $accessCode)
{
$rights["n{$i}"] = [
'GROUP_CODE' => $accessCode,
'TASK_ID' => $taskId,
];
$i++;
$isNeedResetIblockRights = true;
}
}
if (!$isNeedResetIblockRights)
{
return;
}
$rights = $this->appendDefaultRights($rights);
$rights = array_slice($rights, 0, 300, true);
$iblockRights->SetRights($rights);
}