Django-хранитель на БД с общим (неисключительным) доступом - PullRequest
1 голос
/ 21 июля 2011

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

Допустим, у нас есть 3 модели: User, Thesis и UserThesis.

* 1007.*UserThesis - таблица, определяющая отношения между Thesis и User (User является соавтором Thesis)

Сценарий:

  1. User удаляется как автор Thesis путем удаления записи в таблице UserThesis другим приложением.

  2. User пытается изменить Thesis с помощью нашего приложения Django,И ему это удается, потому что Guardian и Django не знают об изменениях в UserThesis.

Я думал о некоторых решениях:

  1. Имея некоторыеРабота cron ищет изменения в UserThesis, проверяя дату изменения записи.Легко проверить наличие дополнений, удаление потребует повторного просмотра всех взаимосвязей.

  2. Изменение схемы Oracle DB для добавления таблиц Guardian DB и создания триггеров для таблицы UserThesis.Я бы не хотел этого делать из-за того, что БД Oracle распределялась между различными приложениями.

  3. Проверка вручную связей в представлениях и шаблонах (большая нагрузка на Oracle).

Какой из них лучший?Есть еще идеи?

1 Ответ

0 голосов
/ 10 августа 2011

Я решил пойти с проверкой разрешений вручную, кэшируя их, когда смогу. Я закончил с методом модели get_perms_from_cache (self, user), который мне очень помог.

...