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