Есть ли способ привязать пользователей к отдельным графикам на сервере Gremlin?

Я устанавливаю несколько отображений графов в базу данных OrientDB на сервере Gremlin. Однако я не могу найти, что писать в Groovy, а также что настраивать в файле конфигурации yaml, чтобы можно было сопоставить каждого пользователя, прошедшего проверку подлинности, с одним графиком, вместо того, чтобы все пользователи, проверенные средством проверки подлинности, могли иметь доступ все. Есть ли способ добиться этого?

1 ответ

Решение

Gremlin Server не предоставляет никаких функций для авторизации - только аутентификация. Вы должны были бы создать что-то самостоятельно, чтобы справиться с ограничением пользователей различными графиками (или другими ограничениями). Это будет означать создание двух вещей:

  1. Обычай ChannelInboundHandlerAdapter обрабатывать авторизацию - может быть, называется AuthorizationHandler
  2. Обычай Channelizer реализация для подключения вашего собственного авторизатора к конвейеру - может быть, называется AuthorizingChannelizer

AuthorizationHandler в основном просто переопределить Нетти channelRead() метод

@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
    if (msg instanceof RequestMessage){
        RequestMessage requestMessage = (RequestMessage) msg;

        // examine contents of RequestMessage to see what is being requested
        // e.g. the graph - the user information will be there too but 
        // depending on the authentication method you're using you might need
        // to re-decode it at this time as it doesn't appear that the authenticated
        // user is placed on the ChannelHandlerContext for some reason. i made
        // a note to change that as it seems helpful and is a simple enough thing 
        // to do
    }
}

Для AuthorizingChannelizer вы бы в основном продлили WebSocketChannelizer и переопределить configure() метод:

@Override
public void configure(ChannelPipeline pipeline) { 
    super.configure(pipeline);

    // add an instance of your `AuthorizingChannelizer` to the end of the 
    // netty pipeline which will put it after the `AuthenticationHandler`
    // but before all the Gremlin processing/execution
    pipeline.addLast("authorizier", authorizingChannelizer); 
}

Затем в вашей конфигурации сервера Gremlin вы заменяете channelizer установка с полным именем вашего AuthorizingChannelizer, Предполагая, что вы поместили свой jar, содержащий этот класс, в путь к Gremlin Server, он должен создать его экземпляр при запуске.

Я бы посмотрел на существующий код " обработчик" и " канал", чтобы получить больше вдохновения о том, как это сделать.

Другие вопросы по тегам