• Модуль: iblock
  • Путь к файлу: ~/bitrix/modules/iblock/classes/general/iblock_rights.php
  • Класс: CIBlockRightsStorage
  • Вызов: CIBlockRightsStorage::AddChildrenSet
function AddChildrenSet($RIGHT_ID, $GROUP_CODE, $bInherited)
{
	global $DB;

	if($this->ELEMENT_ID > 0)
	{
	}
	elseif(is_array($this->_get_section()))
	{
		$DB->Query("
			INSERT INTO b_iblock_section_right (IBLOCK_ID, SECTION_ID, RIGHT_ID, IS_INHERITED)
			SELECT ".$this->IBLOCK_ID.", BS.ID, ".intval($RIGHT_ID).", '".($bInherited? "Y": "N")."'
			FROM
				b_iblock_section BS
			WHERE
				BS.IBLOCK_ID = ".$this->IBLOCK_ID."
				AND BS.LEFT_MARGIN  > ".$this->arSection["LEFT_MARGIN"]."
				AND BS.RIGHT_MARGIN < ".$this->arSection["RIGHT_MARGIN"]."
				AND BS.ID NOT IN (
					SELECT SR.SECTION_ID
					FROM
						b_iblock_right BR
						INNER JOIN b_iblock_section_right SR ON SR.RIGHT_ID = BR.ID
					WHERE
						BR.GROUP_CODE = '".$DB->ForSQL($GROUP_CODE, 32)."'
						AND BR.IBLOCK_ID = ".$this->IBLOCK_ID."
				)
		");

		$DB->Query("
			INSERT INTO b_iblock_element_right (IBLOCK_ID, SECTION_ID, ELEMENT_ID, RIGHT_ID, IS_INHERITED)
			SELECT ".$this->IBLOCK_ID.", BSE.IBLOCK_SECTION_ID, BSE.IBLOCK_ELEMENT_ID, ".intval($RIGHT_ID).", '".($bInherited? "Y": "N")."'
			FROM
				b_iblock_section_element BSE
			WHERE
				BSE.ADDITIONAL_PROPERTY_ID IS NULL
				AND BSE.IBLOCK_SECTION_ID IN (
					SELECT SECTION_ID
					FROM b_iblock_section_right
					WHERE RIGHT_ID = ".intval($RIGHT_ID)."
				)
				AND BSE.IBLOCK_ELEMENT_ID NOT IN (
					SELECT ER.ELEMENT_ID
					FROM
						b_iblock_right BR
						INNER JOIN b_iblock_element_right ER ON ER.RIGHT_ID = BR.ID
					WHERE
						BR.GROUP_CODE = '".$DB->ForSQL($GROUP_CODE, 32)."'
						AND BR.IBLOCK_ID = ".$this->IBLOCK_ID."
						AND (ER.SECTION_ID = BSE.IBLOCK_SECTION_ID OR ER.SECTION_ID = 0)
				)
		");
	}
	else
	{
		$DB->Query("
			INSERT INTO b_iblock_section_right (IBLOCK_ID, SECTION_ID, RIGHT_ID, IS_INHERITED)
			SELECT ".$this->IBLOCK_ID.", BS.ID, ".intval($RIGHT_ID).", '".($bInherited? "Y": "N")."'
			FROM
				b_iblock_section BS
			WHERE
				BS.IBLOCK_ID = ".$this->IBLOCK_ID."
				AND BS.ID NOT IN (
					SELECT SR.SECTION_ID
					FROM
						b_iblock_right BR
						INNER JOIN b_iblock_section_right SR ON SR.RIGHT_ID = BR.ID
					WHERE
						BR.GROUP_CODE = '".$DB->ForSQL($GROUP_CODE, 32)."'
						AND BR.IBLOCK_ID = ".$this->IBLOCK_ID."
				)
		");

		$DB->Query("
			INSERT INTO b_iblock_element_right (IBLOCK_ID, SECTION_ID, ELEMENT_ID, RIGHT_ID, IS_INHERITED)
			SELECT ".$this->IBLOCK_ID.", 0, BE.ID, ".intval($RIGHT_ID).", '".($bInherited? "Y": "N")."'
			FROM
				b_iblock_element BE
			WHERE
				BE.IBLOCK_ID = ".$this->IBLOCK_ID."
				AND BE.IN_SECTIONS = 'N'
				AND BE.ID NOT IN (
					SELECT ER.ELEMENT_ID
					FROM
						b_iblock_right BR
						INNER JOIN b_iblock_element_right ER ON ER.RIGHT_ID = BR.ID
					WHERE
						BR.GROUP_CODE = '".$DB->ForSQL($GROUP_CODE, 32)."'
						AND BR.IBLOCK_ID = ".$this->IBLOCK_ID."
						AND ER.SECTION_ID = 0
				)
		");

		$DB->Query("
			INSERT INTO b_iblock_element_right (IBLOCK_ID, SECTION_ID, ELEMENT_ID, RIGHT_ID, IS_INHERITED)
			SELECT ".$this->IBLOCK_ID.", BSE.IBLOCK_SECTION_ID, BSE.IBLOCK_ELEMENT_ID, ".intval($RIGHT_ID).", '".($bInherited? "Y": "N")."'
			FROM
				b_iblock_section_element BSE
			WHERE
				BSE.ADDITIONAL_PROPERTY_ID IS NULL
				AND BSE.IBLOCK_SECTION_ID IN (
					SELECT SECTION_ID
					FROM b_iblock_section_right
					WHERE RIGHT_ID = ".intval($RIGHT_ID)."
				)
				AND BSE.IBLOCK_ELEMENT_ID NOT IN (
					SELECT ER.ELEMENT_ID
					FROM
						b_iblock_right BR
						INNER JOIN b_iblock_element_right ER ON ER.RIGHT_ID = BR.ID
					WHERE
						BR.GROUP_CODE = '".$DB->ForSQL($GROUP_CODE, 32)."'
						AND BR.IBLOCK_ID = ".$this->IBLOCK_ID."
						AND ER.SECTION_ID in (BSE.IBLOCK_SECTION_ID, 0)
				)
		");
	}
}