Есть ли способ узнать, является ли запрос gremlin запросом на чтение или запросом на запись? - PullRequest
1 голос
/ 27 апреля 2020

Я пытаюсь добавить основную c авторизацию для чтения / записи в gremlin-server, я хочу знать, есть ли способ, с помощью которого я могу определить, является ли этот запрос запросом только для чтения или запросом на запись.

1 Ответ

4 голосов
/ 27 апреля 2020

Нет API-вызова, который вы можете сделать, чтобы определить это, но вы можете получить вдохновение для того, чтобы обнаружить его с ReadOnlyStrategy здесь . Ключ заключается в циклическом переключении объекта Traversal и поиске Step, который реализует интерфейс Mutating. Если вы найдете один из них, вы можете классифицировать обход как запрос на запись.

Конечно, для Gremlin классификация запроса и чтение или запись не настолько двоичны, как это может быть сочетание чтения и записи. Также возможно, что во время выполнения запись может никогда не выполняться в зависимости от потока обхода, поэтому она может быть «только для чтения во время выполнения». Надеюсь, обнаружение интерфейса Mutating является достаточно хорошим решением для вас.

Я не уверен, где вы намереваетесь реализовать эту функцию авторизации, но я чувствую, что лучше всего это сделать как TraversalStrategy, который затем будет стрелять в обход выполнения. Я не знаю, слишком ли поздно для вашего процесса авторизации, но это будет самый простой способ, который я могу себе представить. Проблема в том, что если вы принимаете сценарии, то при таком подходе вы можете получить частичное выполнение этого сценария до того момента, когда авторизация не будет разрешена. Если вам нужно запретить весь сценарий на основе одного обхода записи, вам может понадобиться пользовательская песочница . Конечно, лучше вообще избегать скриптов и просто использовать только запросы на основе байт-кода. Если вас интересует только байт-код, тогда TraversalStrategy должно работать очень хорошо для случая использования авторизации.

...