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