• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/security/attributesprovider.php
  • Класс: Bitrix\Crm\Security\AttributesProvider
  • Вызов: AttributesProvider::prepareAttributesByPermission
protected function prepareAttributesByPermission(array $userAttributes, string $permission, $statusRestriction = null): array
{
	$result = [];
	$partOfResult = [];

	if ($permission == UserPermissions::PERMISSION_NONE)
	{
		return [];
	}
	elseif ($permission == UserPermissions::PERMISSION_OPENED)
	{
		$partOfResult[] = 'O';
		foreach ($userAttributes['USER'] as $userId)
		{

			$result[] = $statusRestriction ? [$statusRestriction, $userId] : [$userId];
		}
	}
	elseif ($permission != UserPermissions::PERMISSION_ALL)
	{
		if ($permission >= UserPermissions::PERMISSION_SELF)
		{
			foreach ($userAttributes['USER'] as $userId)
			{
				$result[] =  $statusRestriction ? [$statusRestriction, $userId] : [$userId];
			}
		}
		if ($permission >= UserPermissions::PERMISSION_DEPARTMENT && isset($userAttributes['INTRANET']))
		{
			foreach ($userAttributes['INTRANET'] as $departmentId)
			{
				//HACK: SKIP IU code it is not required for this method
				if ($departmentId != '' && mb_substr($departmentId, 0, 2) === 'IU')
				{
					continue;
				}

				if (!in_array($departmentId, $partOfResult))
				{
					$partOfResult[] = $departmentId;
				}
			}
		}
		if ($permission >= UserPermissions::PERMISSION_SUBDEPARTMENT && isset($userAttributes['SUBINTRANET']))
		{
			foreach ($userAttributes['SUBINTRANET'] as $departmentId)
			{
				if ($departmentId != '' && mb_substr($departmentId, 0, 2) === 'IU')
				{
					continue;
				}

				if (!in_array($departmentId, $partOfResult))
				{
					$partOfResult[] = $departmentId;
				}
			}
		}
	}
	else //self::PERM_ALL
	{
		$result[] = $statusRestriction ? [$statusRestriction] : [];
	}

	if (!empty($partOfResult))
	{
		$result[] = $statusRestriction
			? array_merge([$statusRestriction], $partOfResult)
			: $partOfResult;
	}

	return $result;
}