Я работаю над многопользовательским веб-приложением с SQLAlchemy и хотел бы использовать столбец tenant_id в некоторых таблицах для изоляции данных на каждого арендатора. В идеале фильтрация и добавление этого tenant_id должны выполняться автоматически.
Я нашел этот доклад создателя Flask, в котором кратко упоминается способ сделать это с помощью sqlalchemy. Этот рецепт (найденный из этого вопроса о переполнении стека) более подробно описывает этот подход, но также указывает на некоторые недостатки. Прежде всего, он не будет обрабатывать запросы на обновление или удаление. Мне кажется, что это серьезный недостаток: разработчик, привыкший автоматически обрабатывать tenant_id, может легко забыть при выполнении обновления или удаления, создав тем самым уязвимость. Он предлагает решить проблему обновления и удаления с помощью обработчика событий before_cursor_execute (). Однако, насколько я могу судить, такой подход подразумевал бы непосредственное редактирование текста SQL, что лишило бы смысла использования SQLAlchemy. Не такая большая проблема, но вставки также не обрабатываются.
Я также обнаружил эту библиотеку , которая пытается решить проблему, однако она описана как экспериментальная и не обновлялась в течение 5 лет. Кажется, есть проблемы и с вышеуказанным решением.
Мне кажется, что это обычная модель, и я удивлен, что нет хороших, надежных решений для SQLAlchemy. Эта библиотека поддерживает этот подход для Django.
В идеале я хотел бы иметь сеанс, который ограничен арендатором и автоматически применяет tenant_id к каждому выбору, обновлению, удалению и вставке, чтобы запросы могли быть написаны без необходимости рассматривать арендатора вообще. Это возможно?
Я был бы очень признателен, если бы кто-нибудь мог помочь или указать мне правильное направление. Спасибо!