• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/classes/general/crm_invoice.php
  • Класс: \CAllCrmInvoice
  • Вызов: CAllCrmInvoice::setCatalogAdminRights
static function setCatalogAdminRights()
{
	if (!Loader::includeModule('iblock'))
		return false;
	if (!Loader::includeModule('catalog'))
		return true;

	$groupId = 1; // admin group

	$catalogs = [];
	$iterator = Catalog\CatalogIblockTable::getList([
		'select' => ['IBLOCK_ID', 'PRODUCT_IBLOCK_ID']
	]);
	while ($row = $iterator->fetch())
	{
		$row['IBLOCK_ID'] = (int)$row['IBLOCK_ID'];
		$catalogs[$row['IBLOCK_ID']] = $row['IBLOCK_ID'];
		$row['PRODUCT_IBLOCK_ID'] = (int)$row['PRODUCT_IBLOCK_ID'];
		if ($row['PRODUCT_IBLOCK_ID'] > 0)
			$catalogs[$row['PRODUCT_IBLOCK_ID']] = $row['PRODUCT_IBLOCK_ID'];
	}
	unset($row, $iterator);

	if (!empty($catalogs))
	{
		$iblockObject = new \CIBlock();

		$rightsId = null;
		$row = Main\TaskTable::getList(array(
			'select' => array('ID'),
			'filter' => array('=LETTER' => 'X', '=MODULE_ID' => 'iblock', '=SYS' => 'Y')
		))->fetch();
		if (!empty($row))
			$rightsId = $row['ID'];
		unset($row);
		$groupCode = 'G'.$groupId;

		foreach ($catalogs as $id)
		{
			$rightsMode = \CIBlock::GetArrayByID($id, 'RIGHTS_MODE');
			if ($rightsMode == Iblock\IblockTable::RIGHTS_SIMPLE)
			{
				$rights = \CIBlock::GetGroupPermissions($id);
				$rights[$groupId] = 'X';
				\CIBlock::SetPermission($id, $rights);
			}
			elseif ($rightsMode == Iblock\IblockTable::RIGHTS_EXTENDED && $rightsId !== null)
			{
				$rightsObject = new \CIBlockRights($id);
				$rights = $rightsObject->GetRights();
				$rights['n0'] = array(
					'GROUP_CODE'  => $groupCode,
					'DO_INHERIT' => 'Y',
					'IS_INHERITED' => 'N',
					'OVERWRITED' => 0,
					'TASK_ID' => $rightsId,
					'XML_ID' => null,
					'ENTITY_TYPE' => 'iblock',
					'ENTITY_ID' => $id
				);
				$rightsObject->SetRights($rights);
			}
		}
		unset($rights, $id, $groupCode);
		unset($iblockObject);
	}
	unset($catalogs);
	unset($groupId);

	return true;
}