- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/security/controller/compatible.php
- Класс: Bitrix\Crm\Security\Controller\Compatible
- Вызов: Compatible::getPermissionAttributes
public function getPermissionAttributes(string $permissionEntityType, array $entityIDs): array
{
$entityIDs = array_unique(array_filter(array_map('intval', $entityIDs)));
if (empty($entityIDs))
{
return [];
}
$attributes = [];
$entityPrefix = mb_strtoupper($permissionEntityType);
$missedEntityIDs = [];
foreach ($entityIDs as $entityId)
{
$entityKey = "{$entityPrefix}_{$entityId}";
if (isset($this->cachedAttrs[$entityKey]))
{
$attributes[$entityId] = $this->cachedAttrs[$entityKey];
}
else
{
$missedEntityIDs[] = $entityId;
}
}
if (empty($missedEntityIDs))
{
return $attributes;
}
// "SELECT ENTITY_ID, ATTR FROM b_crm_entity_perms WHERE ENTITY = '{$DB->ForSql($permissionEntityType)}' AND ENTITY_ID IN({$missedEntityIDs})"
$attributesCollection = Crm\EntityPermsTable::getList([
'select' => [
'ENTITY_ID',
'ATTR',
],
'filter' => [
'=ENTITY' => $permissionEntityType,
'@ENTITY_ID' => $missedEntityIDs,
]
]);
while ($entityAttributesData = $attributesCollection->Fetch())
{
$entityId = $entityAttributesData['ENTITY_ID'];
$entityAttribute = $entityAttributesData['ATTR'];
$attributes[$entityId][] = $entityAttribute;
$entityKey = "{$entityPrefix}_{$entityId}";
if (!isset($this->cachedAttrs[$entityKey]))
{
$this->cachedAttrs[$entityKey] = [];
}
$this->cachedAttrs[$entityKey][] = $entityAttribute;
}
return $attributes;
}