- Модуль: main
- Путь к файлу: ~/bitrix/modules/main/classes/general/main.php
- Класс: CAllMain
- Вызов: CAllMain::GetUserRoles
static function GetUserRoles($module_id, $arGroups=false, $use_default_role="Y", $max_role_for_super_admin="Y", $site_id=false)
{
global $DB, $USER;
static $MODULE_ROLES = array();
$arRoles = array();
$min_role = "D";
$max_role = "W";
if($arGroups===false)
{
if(is_object($USER))
$arGroups = $USER->GetUserGroupArray();
if(!is_array($arGroups))
$arGroups[] = 2;
}
$key = $use_default_role."_".$max_role_for_super_admin;
$groups = '';
if(is_array($arGroups) && !empty($arGroups))
{
foreach($arGroups as $grp)
$groups .= ($groups<>''? ',':'').intval($grp);
$key .= "_".$groups;
}
$cache_site_key = ($site_id ? $site_id : "COMMON");
if(isset($MODULE_ROLES[$module_id][$cache_site_key][$key]))
{
$arRoles = $MODULE_ROLES[$module_id][$cache_site_key][$key];
}
else
{
if(is_array($arGroups) && !empty($arGroups))
{
if(in_array(1,$arGroups) && $max_role_for_super_admin=="Y")
$arRoles[] = $max_role;
$strSql =
"SELECT MG.G_ACCESS FROM b_group G ".
" LEFT JOIN b_module_group MG ON (G.ID = MG.GROUP_ID ".
" AND MG.MODULE_ID = '".$DB->ForSql($module_id,50)."') ".
" AND MG.SITE_ID ".($site_id ? "= '".$DB->ForSql($site_id)."'" : "IS NULL")." ".
"WHERE G.ID in (".$groups.") AND G.ACTIVE = 'Y'";
$t = $DB->Query($strSql);
$default_role = $min_role;
if($use_default_role=="Y")
$default_role = COption::GetOptionString($module_id, "GROUP_DEFAULT_RIGHT", $min_role);
while ($tr = $t->Fetch())
{
if ($tr["G_ACCESS"] !== null)
{
$arRoles[] = $tr["G_ACCESS"];
}
else
{
if($use_default_role=="Y")
$arRoles[] = $default_role;
}
}
}
//if($use_default_role=="Y")
//{
// $arRoles[] = COption::GetOptionString($module_id, "GROUP_DEFAULT_RIGHT", $min_role);
//}
$arRoles = array_unique($arRoles);
$MODULE_ROLES[$module_id][$cache_site_key][$key] = $arRoles;
}
return $arRoles;
}