Я работаю над веб-приложением Family Tree с Django (в котором я новичок) и решаю, как разработать класс FamilyTree, чтобы пользователи могли иметь право просматривать/редактировать только определенные деревья.
В нынешнем виде у меня есть два абстрактных метакласса: Entity и Relation.
Объект может быть человеком или даже группой или событием. Отношение может быть родителем, братом, сестрой, партнером и т. д.
Отношение имеет внешние ключи "от" и "к", каждый из которых соответствует одному объекту. Поскольку абстракция мне понравилась больше, чем это предложение: Структура данных семейного древа, я решил хранить только личная информация в подклассе Person класса Entity. Доступ к отношениям осуществляется через «родственное имя». Если код требуется, пожалуйста, дайте мне знать. Мне нужно разрешение, чтобы опубликовать это.
Кажется, есть два основных способа разработки класса FamilyTree:
Отношения ManyToOne из экземпляра FamilyTree ко всем сущностям, или ко всем отношениям, или к обоим.
Отношение OneToOne к корневому объекту или отношению, из которого остальная часть дерева распаковывается во время сеанса.
Я не думал о каких-либо недостатках второго метода, который, похоже, ускорит работу.
Мы будем очень признательны за плюсы и минусы обоих вариантов, а также за ваш личный выбор.
Также:
- Мысли о реализации, специфичные для Django.
- Может быть, назначение разрешений только на основе FamilyTrees — не лучшая идея?
Заранее спасибо!
/edit/tree/234/entity/567/
, ее легко изменить вручную на/edit/tree/123/entity/1/
, и я буду редактировать совершенно другого человека и дерево. Вы можете предотвратить это, только просмотрев разрешения для этого дерева (т. е. корневого объекта) в своем представлении. Конечно, здесь дерево находится в URL. Но что, если ссылки похожи на/edit/entity/567
и/edit/entity/1
? Как мгновенно узнать, может ли пользователь редактировать объект 567 так же, как и объект 1? - person   schedule 24.08.2015