Документация для разработчиков
Темная тема

OnChangePermissions

Описание и параметры

функция-обработчик(
	array site_path,
	array permissions
);
Событие "OnChangePermissions" вызывается при изменении прав доступа к файлу или папке методом $APPLICATION->SetFileAccessPermission.

Параметры

ПараметрОписание
site_path Массив вида: array("идентификатор сайта", "путь к файлу относительно корня этого сайта").
permissions Массив прав доступа.

Смотрите также

Примеры

<?
// файл /bitrix/modules/search/classes/mysql/search.php
class CSearch extends CAllSearch
{
	// создаем обработчик события "OnChangePermissions"
	public static function OnChangeFilePermissions($path, $permission)
	{
		CMain::InitPathVars($site, $path);
		$DOC_ROOT = CSite::GetSiteDocRoot($site);

		while(strlen($path)>0 && $path[strlen($path)-1]=="/") //отрежем / в конце, если есть
			$path=substr($path, 0, strlen($path)-1);

		global $APPLICATION, $DB;
		if(file_exists($DOC_ROOT.$path))
		{
			@set_time_limit(300);
			$arGroups = CSearch::GetGroupCached();
			if(is_dir($DOC_ROOT.$path))
			{
				$handle  = @opendir($DOC_ROOT.$path);
				while($file = @readdir($handle))
				{
					if($file == "." || $file == "..") continue;
					if(is_dir($DOC_ROOT.$path."/".$file))
					{
						if($path."/".$file=="/bitrix")
							continue;
					}
					CSearch::OnChangeFilePermissions(Array($site, $path."/".$file), Array());
				}
			}
			else //if(is_dir($DOCUMENT_ROOT.$path))
			{
				$strGPerm = "0";
				for($i=0; $i<count($arGroups); $i++)
				{
					if($arGroups[$i]>1)
					{
						$p = $APPLICATION->GetFileAccessPermission(Array($site, $path), Array($arGroups[$i]));
						if($p>="R")
						{
							$strGPerm .= ",".$arGroups[$i];
							if($arGroups[$i]==2) break;
						}
					}
				}

				$r = $DB->Query("SELECT ID FROM b_search_content WHERE MODULE_ID='main' AND ITEM_ID='".$site."|".$path."'");
				while($arR = $r->Fetch())
					$DB->Query("DELETE FROM b_search_content_group WHERE SEARCH_CONTENT_ID=".$arR["ID"]);

				$strSql =
					"INSERT INTO b_search_content_group(SEARCH_CONTENT_ID, GROUP_ID) ".
					"SELECT S.ID, G.ID ".
					"FROM b_search_content S, b_group G ".
					"WHERE MODULE_ID='main' ".
					"    AND ITEM_ID='".$site."|".$path."' ".
					"    AND G.ID IN (".$strGPerm.") ";

				$DB->Query($strSql);
			} //if(is_dir($DOCUMENT_ROOT.$path))
		}//if(file_exists($DOCUMENT_ROOT.$path))
	}
}
?>

Пример регистрации функции-обработчика:

<?
// регистрируем обработчик события "OnChangePermissions"
RegisterModuleDependences("main", "OnChangePermissions", "search", "CSearch", "OnChangeFilePermissions");
?>


© «Битрикс», 2001-2024, «1С-Битрикс», 2024