- Модуль: iblock
- Путь к файлу: ~/bitrix/modules/iblock/classes/general/iblock_rights.php
- Класс: CIBlockElementRights
- Вызов: CIBlockElementRights::GetUserOperations
static function GetUserOperations($arID, $USER_ID = 0)
{
global $DB, $USER;
$USER_ID = intval($USER_ID);
if(is_object($USER))
{
if($USER_ID <= 0)
$USER_ID = intval($USER->GetID());
$bAuthorized = $USER->IsAuthorized();
}
else
{
$bAuthorized = false;
}
if ($USER_ID > 0)
{
$acc = new CAccess;
$acc->UpdateCodes(array('USER_ID' => $USER_ID));
}
if(!is_array($arID))
$sqlID = array(intval($arID));
elseif(empty($arID))
return array();
else
$sqlID = array_map('intval', $arID);
$arResult = array();
while (!empty($sqlID))
{
if (count($sqlID) > 1000)
{
$head = array_slice($sqlID, 0, 1000);
array_splice($sqlID, 0, 1000);
}
else
{
$head = $sqlID;
$sqlID = array();
}
$rs = $DB->Query("
SELECT ER.ELEMENT_ID ID, O.NAME
FROM b_iblock_element E
INNER JOIN b_iblock_element_right ER ON ER.ELEMENT_ID = E.ID
INNER JOIN b_iblock_right IBR ON IBR.ID = ER.RIGHT_ID
INNER JOIN b_task_operation T ON T.TASK_ID = IBR.TASK_ID
INNER JOIN b_operation O ON O.ID = T.OPERATION_ID
".($USER_ID > 0? "LEFT": "INNER")." JOIN b_user_access UA ON UA.ACCESS_CODE = IBR.GROUP_CODE AND UA.USER_ID = ".$USER_ID."
WHERE E.ID in (".implode(", ", $head).")
".($bAuthorized || $USER_ID > 0? "
AND (UA.USER_ID IS NOT NULL
".($bAuthorized? "OR IBR.GROUP_CODE = 'AU'": "")."
".($USER_ID > 0? "OR (IBR.GROUP_CODE = 'CR' AND E.CREATED_BY = ".$USER_ID.")": "")."
)": "")."
");
while($ar = $rs->Fetch())
$arResult[$ar["ID"]][$ar["NAME"]] = $ar["NAME"];
}
if(is_array($arID))
return $arResult;
elseif(array_key_exists($arID, $arResult))
return $arResult[$arID];
else
return array();
}