• Модуль: iblock
  • Путь к файлу: ~/bitrix/modules/iblock/classes/general/iblock.php
  • Класс: CAllIBlock
  • Вызов: CAllIBlock::GetPermission
static function GetPermission($IBLOCK_ID, $FOR_USER_ID = false)
{
	/** @global CDatabase $DB */
	global $DB;
	/** @global CUser $USER */
	global $USER;
	static $CACHE = array();
	$USER_ID = is_object($USER)? intval($USER->GetID()): 0;

	if($FOR_USER_ID > 0 && $FOR_USER_ID != $USER_ID)
	{
		$arGroups = CUser::GetUserGroup($FOR_USER_ID);
		if(
			in_array(1, $arGroups)
			&& COption::GetOptionString("main", "controller_member", "N") != "Y"
			&& COption::GetOptionString("main", "~controller_limited_admin", "N") != "Y"
		)
			return "X";
		$USER_GROUPS = implode(",", $arGroups);
	}
	elseif(is_object($USER))
	{
		if($USER->IsAdmin())
			return "X";
		$USER_GROUPS = $USER->GetGroups();
	}
	else
	{
		$USER_GROUPS = "2";
	}

	$IBLOCK_ID = intval($IBLOCK_ID);
	$CACHE_KEY = $IBLOCK_ID."|".$USER_GROUPS;

	if(!array_key_exists($CACHE_KEY, $CACHE))
	{
		//Deny by default
		$CACHE[$CACHE_KEY] = "D";
		//Now check database
		$strSql = "
			SELECT MAX(IBG.PERMISSION) as P
			FROM b_iblock_group IBG
			WHERE IBG.IBLOCK_ID=".$IBLOCK_ID."
			AND IBG.GROUP_ID IN (".$USER_GROUPS.")
		";
		$res = $DB->Query($strSql);
		if($r = $res->Fetch())
		{
			if($r['P'] <> '')
			{
				//Overwrite default value
				$CACHE[$CACHE_KEY] = $r["P"];
			}
		}
	}

	return $CACHE[$CACHE_KEY];
}