• Модуль: iblock
  • Путь к файлу: ~/bitrix/modules/iblock/classes/general/iblock_rights.php
  • Класс: CIBlockRights
  • Вызов: CIBlockRights::_check_if_user_has_right
static function _check_if_user_has_right($obRights, $ID, $permission, $flags = 0)
{
	global $USER;
	$USER_ID = 0;

	if($USER_ID > 0 && (!is_object($USER) || $USER_ID != $USER->GetID()))
	{
		$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());

	$RIGHTS_MODE = CIBlock::GetArrayByID($obRights->GetIBlockID(), "RIGHTS_MODE");
	if($RIGHTS_MODE === IblockIblockTable::RIGHTS_EXTENDED)
	{
		if(is_array($ID))
			$arOperations = $obRights->GetUserOperations($ID, $user_id);
		else
		{
			static $cache;
			$cache_id = get_class($obRights).$user_id."|".$ID;
			if(!isset($cache[$cache_id]))
				$cache[$cache_id] = $obRights->GetUserOperations($ID, $user_id);
			$arOperations = $cache[$cache_id];
		}

		if($flags & CIBlockRights::RETURN_OPERATIONS)
			return $arOperations;
		else
			return isset($arOperations[$permission]);
	}
	else//if($RIGHTS_MODE === IblockIblockTable::RIGHTS_SIMPLE)
	{
		$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]);
	}
}