• Модуль: landing
  • Путь к файлу: ~/bitrix/modules/landing/lib/internals/site.php
  • Класс: BitrixLandingInternalsSiteTable
  • Вызов: SiteTable::setAccessFilter
static function setAccessFilter($params)
{
	if (
		isset($params['filter']['CHECK_PERMISSIONS']) &&
		$params['filter']['CHECK_PERMISSIONS'] == 'N'
	)
	{
		return $params;
	}

	// build filter
	$allowedSites = Rights::getAllowedSites();
	$buildFilter = Rights::getAccessFilter(
		$allowedSites ? ['ID' => $allowedSites] : []
	);
	if (empty($buildFilter))
	{
		return $params;
	}

	// create runtime/filter keys if no exists
	if (
		!isset($params['filter']) ||
		!is_array($params['filter'])
	)
	{
		$params['filter'] = [];
	}
	if (
		!isset($params['runtime']) ||
		!is_array($params['runtime'])
	)
	{
		$params['runtime'] = [];
	}
	if (
		!isset($params['group']) ||
		!is_array($params['group'])
	)
	{
		$params['group'] = [];
	}

	//$tasks = Rights::getAccessTasksReferences();
	//$readCode = Rights::ACCESS_TYPES['denied'];
	$extendedRights = Rights::isExtendedMode();
	static $expectedRoles = null;
	if ($expectedRoles === null)
	{
		$expectedRoles = Role::getExpectedRoleIds();
	}

	// create runtime fields
	$runtimeParams = [];
	$runtimeParams[] = [
		'LOGIC' => 'OR',
		'=this.ID' => 'ref.ENTITY_ID',
		'=ref.ENTITY_ID' => [0]
	];
	if ($extendedRights)
	{
		$runtimeParams['=ref.ROLE_ID'] = [0];
	}
	else
	{
		$runtimeParams['=ref.ENTITY_TYPE'] = ['?', Rights::ENTITY_TYPE_SITE];
		$runtimeParams['@ref.ROLE_ID'] = [implode(',', $expectedRoles)];
	}
	$params['runtime'][] = new EntityReferenceField(
		'RIGHTS',
		'BitrixLandingInternalsRightsTable',
		$runtimeParams,
		['join_type' => 'INNER']
	);

	$params['group'][] = 'ID';

	// build filter
	$params['filter'][] = $buildFilter;

	return $params;
}