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