• Модуль: iblock
  • Путь к файлу: ~/bitrix/modules/iblock/classes/general/iblock_rights.php
  • Класс: CIBlockRights
  • Вызов: CIBlockRights::ChangeParents
function ChangeParents($arOldParents, $arNewParents)
{
	$obStorage = $this->_storage_object();

	foreach($arOldParents as $id)
	{
		$ob = $this->_get_parent_object($id);
		if(is_object($ob))
		{
			$arRights = $ob->GetRights();
			foreach($arRights as $RIGHT_ID => $arRight)
			{
				if($arRight["DO_INHERIT"] === "Y")
				{
					$obStorage->DeleteSelfSet($RIGHT_ID, CIBlockRights::RIGHT_ID);
					$obStorage->DeleteChildrenSet($RIGHT_ID, CIBlockRights::RIGHT_ID);
				}
			}
		}
	}

	$arOwnGroupCodes = array();
	$arDBRights = $this->GetRights();
	foreach($arDBRights as $RIGHT_ID => $arOwnRight)
		$arOwnGroupCodes[$arOwnRight["GROUP_CODE"]] = $RIGHT_ID;

	foreach($arNewParents as $id)
	{
		$ob = $this->_get_parent_object($id);
		if(is_object($ob))
		{
			$arRights = $ob->GetRights();
			foreach($arRights as $RIGHT_ID => $arRight)
			{
				if(
					$arRight["DO_INHERIT"] === "Y"
					&& !array_key_exists($arRight["GROUP_CODE"], $arOwnGroupCodes)
				)
				{
					$obStorage->_set_section($id);
					$obStorage->AddSelfSet($RIGHT_ID, /*$bInherited=*/true);
					$obStorage->AddChildrenSet($RIGHT_ID, $arRight["GROUP_CODE"], /*$bInherited=*/true);
				}
			}
		}
	}
}