static function _check_if_user_has_right($obRights, $ID, $permission, $flags = 0) { global $DB, $USER; $USER_ID = 0; if($USER_ID > 0 && (!is_object($USER) || $USER_ID != $USER->GetID())) { $user_id = intval($USER_ID); $arGroups = CUser::GetUserGroup($USER_ID); if( in_array(1, $arGroups) && COption::GetOptionString("main", "controller_member", "N") != "Y" && COption::GetOptionString("main", "~controller_limited_admin", "N") != "Y" ) { return CIBlockRights::_mk_result($ID, CIBlockRights::LetterToOperations("X"), true, $flags); } } elseif(!is_object($USER)) { return CIBlockRights::_mk_result($ID, array(), false, $flags); } elseif($USER->IsAdmin()) { return CIBlockRights::_mk_result($ID, CIBlockRights::LetterToOperations("X"), true, $flags); } $user_id = intval($USER->GetID()); $arGroups = $USER->GetUserGroupArray(); $RIGHTS_MODE = CIBlock::GetArrayByID($obRights->GetIBlockID(), "RIGHTS_MODE"); if($RIGHTS_MODE === "E") { static $Ecache; if(is_array($ID)) $arOperations = $obRights->GetUserOperations($ID, $user_id); else { $cache_id = $user_id."|".$ID; if(!isset($Ecache[$cache_id])) $Ecache[$cache_id] = $obRights->GetUserOperations($ID, $user_id); $arOperations = $Ecache[$cache_id]; } if($flags & CIBlockRights::RETURN_OPERATIONS) return $arOperations; else return isset($arOperations[$permission]); } else//if($RIGHTS_MODE === "S") { $letter = CIBlock::GetPermission($obRights->GetIBlockID()); $arOperations = CIBlockRights::_mk_result($ID, CIBlockRights::LetterToOperations($letter), CIBlockRights::LetterToOperations($letter), $flags); if($flags & CIBlockRights::RETURN_OPERATIONS) return $arOperations; else return isset($arOperations[$permission]); } }