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