Compatible::getPermissionAttributes

  1. Bitrix24 API (v. 23.675.0)
  2. crm
  3. Compatible
  4. getPermissionAttributes
  • Модуль: 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;
}

Добавить комментарий