• Модуль: security
  • Путь к файлу: ~/bitrix/modules/security/classes/general/filter_mask.php
  • Класс: CSecurityFilterMask
  • Вызов: CSecurityFilterMask::Check
static function Check($siteId, $uri)
{
	global $DB, $CACHE_MANAGER;
	$bFound = false;

	if(CACHED_b_sec_filter_mask !== false && is_object($CACHE_MANAGER))
	{
		$cache_id = "b_sec_filter_mask";
		if($CACHE_MANAGER->Read(CACHED_b_sec_filter_mask, $cache_id, "b_sec_filter_mask"))
		{
			$arMasks = $CACHE_MANAGER->Get($cache_id);
		}
		else
		{
			$arMasks = array();

			$rs = $DB->Query("SELECT * FROM b_sec_filter_mask ORDER BY SORT");
			while($ar = $rs->Fetch())
			{
				$site_id = $ar["SITE_ID"]? $ar["SITE_ID"]: "-";
				$arMasks[$site_id][$ar["SORT"]] = $ar["PREG_MASK"];
			}

			$CACHE_MANAGER->Set($cache_id, $arMasks);
		}

		if(isset($arMasks["-"]) && is_array($arMasks["-"]))
		{
			foreach($arMasks["-"] as $mask)
			{
				if(preg_match("#^".$mask."$#", $uri))
				{
					$bFound = true;
					break;
				}
			}
		}

		if (
			!$bFound
			&& $siteId
			&& isset($arMasks[$siteId])
		)
		{
			foreach($arMasks[$siteId] as $mask)
			{
				if(preg_match("#^".$mask."$#", $uri))
				{
					$bFound = true;
					break;
				}
			}
		}

	}
	else
	{
		$sql = "
			SELECT m.*
			FROM
				b_sec_filter_mask m
			WHERE
				(m.SITE_ID IS NULL AND '".$DB->ForSQL($uri)."' like m.LIKE_MASK)
		";
		if ($siteId)
		{
			$sql .= "
			OR (m.SITE_ID = '".$DB->ForSQL($siteId)."' AND '".$DB->ForSQL($uri)."' like m.LIKE_MASK)
			";
		}

		$rs = $DB->Query($sql);
		if($rs->Fetch())
			$bFound = true;
	}

	return $bFound;
}