• Модуль: imopenlines
  • Путь к файлу: ~/bitrix/modules/imopenlines/lib/config.php
  • Класс: BitrixImOpenLinesConfig
  • Вызов: Config::canDoOperation
static function canDoOperation($configId, $entity, $action, $userId = null)
{
	if (isset(self::$cacheOperation[$configId][$entity][$action]))
	{
		return self::$cacheOperation[$configId][$entity][$action];
	}

	$userId = $userId ?? SecurityHelper::getCurrentUserId();
	if (isset(self::$cachePermission[$userId][$entity][$action]))
	{
		$allowedUserIds = self::$cachePermission[$userId][$entity][$action];
	}
	else
	{
		$permission = SecurityPermissions::createWithCurrentUser();
		$allowedUserIds = SecurityHelper::getAllowedUserIds(
			$userId,
			$permission->getPermission($entity, $action)
		);

		self::$cachePermission[$userId][$entity][$action] = $allowedUserIds;
	}

	if (!is_array($allowedUserIds))
	{
		self::$cacheOperation[$configId][$entity][$action] = true;
		return true;
	}
	elseif (empty($allowedUserIds))
	{
		self::$cacheOperation[$configId][$entity][$action] = false;
		return false;
	}

	$canEdit = false;
	$orm = ModelQueueTable::getList([
		'filter' => [
			'=USER_ID' => $allowedUserIds,
			'=CONFIG_ID' => $configId
		],
		'order' => [
			'SORT' => 'ASC',
			'ID' => 'ASC'
		]
	]);
	if ($row = $orm->fetch())
	{
		$canEdit = true;
	}
	if (!$canEdit)
	{
		$configManager = new self();
		$config = $configManager->get($configId, false);

		if ($config['MODIFY_USER_ID'] == $userId)
		{
			$canEdit = true;
		}
	}

	self::$cacheOperation[$configId][$entity][$action] = $canEdit;

	return $canEdit;
}