• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/security/role/rolepermission.php
  • Класс: Bitrix\Crm\Security\Role\RolePermission
  • Вызов: RolePermission::getPermissionsByRoles
static function getPermissionsByRoles(array $roleIds): array
{
	if (empty($roleIds))
	{
		return [];
	}

	$rolePermissions = \Bitrix\Crm\Security\Role\Model\RolePermissionTable::getList([
		'filter' => [
			'@ROLE_ID' => $roleIds,
		],
		'select' => [
			'ENTITY',
			'FIELD',
			'FIELD_VALUE',
			'ATTR',
			'PERM_TYPE',
		],
		'cache' => [
			'ttl' => 84600,
		]
	]);

	$result = [];
	while ($permission = $rolePermissions->fetch())
	{
		$attribute = trim((string)$permission['ATTR']);
		$field = (string)$permission['FIELD'];
		$fieldValue = (string)$permission['FIELD_VALUE'];
		$entity = (string)$permission['ENTITY'];
		$permissionType = (string)$permission['PERM_TYPE'];

		if ($field == '-')
		{
			if (!isset($result[$entity][$permissionType][$field])
				|| $attribute > $result[$entity][$permissionType][$field])
			{
				$result[$entity][$permissionType][$field] = $attribute;
			}
		}
		else
			if (!isset($result[$entity][$permissionType][$field][$fieldValue])
				|| $attribute > $result[$entity][$permissionType][$field][$fieldValue])
			{
				$result[$entity][$permissionType][$field][$fieldValue] = $attribute;
			}
	}

	return $result;
}