Я строю систему авторизации/контроля доступа в приложении Python, в котором используется Pimongo для доступа к MongoDB. Мне нужно динамически решить-во время выполнения и для произвольных форм запросов-будь то заданная команда MongoDB, выпущенная через Pimongo, является операцией чтения или записи, чтобы разделить обработку на чтения, выполненные в против. .insert_one () вызовы. Например, он может запустить сложные агрегации, карты-восстановление, find_and_modify и т. Д. Уровень, поэтому он должен работать до того, как команды будут переданы в MongoDB. Я обнаружил, что драйвер node.js выявляет наборы команд с записи, но Pimongo не делает. Это использует поведение реплик MongoDB:
Подход: Вы временно отправляете команду вторичному члену набора копий (с помощью readpreference = вторичное ). Если команда выполняется без ошибки, это операция чтения. Если он терпит неудачу с «не первичным», «notwriteprimary» или аналогичными ошибками/кодами, это запись. Основная проблема с этим будет: что, если вторичный член не существует при выполнении проверки, я проверил, и это принесло бы ошибку, и поэтому мы не сможем узнать, чтение или нет.OperationFailure, проверка сообщений об ошибках и кодах. Это работает в моих первоначальных тестах, но я хочу быть уверенным в правильности и эффективности. Путь? /> Вот эскиз дистиллированного кода о том, что я делаю: < /p>
from pymongo import MongoClient, ReadPreference
from pymongo.errors import NotPrimaryError, OperationFailure
def is_read_command(db, command):
try:
secondary_db = db.with_options(read_preference=ReadPreference.SECONDARY)
secondary_db.command(command)
return True
except (NotPrimaryError, OperationFailure) as exc:
err_msg = str(exc)
if getattr(exc, "code", None) in (10107, 13435) or "not primary" in err_msg.lower() or "not master" in err_msg.lower():
return False
raise
Подробнее здесь: https://stackoverflow.com/questions/797 ... -write-for
Как я могу программно определить, является ли команда Pymongo быть чтением или записи для логики разрешения (без резко - ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Команда последней записи точки управления доступом к записи возвращает все записи.
Anonymous » » в форуме Android - 0 Ответы
- 107 Просмотры
-
Последнее сообщение Anonymous
-