Добавление разрешений для каждого объекта администратору django

История вопроса

Я разрабатываю приложение django для сайта аренды на время отпуска. У него будет два типа пользователей: арендаторы и управляющие недвижимостью.

Я бы хотел, чтобы управляющие недвижимостью могли управлять своей арендуемой недвижимостью в администраторе django. Однако они должны иметь возможность управлять только своей собственностью.

Я понимаю, что администратор django по умолчанию не поддерживает это. Мне интересно, насколько сложно было бы добавить эту функциональность, и, если это возможно, как лучше всего с этим справиться.


Цель

В идеале я представляю, как это работает примерно так:

auth уже разрешает такие разрешения:

vacation | rental | Can add rental
vacation | rental | Can change rental
vacation | rental | Can delete rental

Я бы хотел изменить это на что-то вроде:

vacation | rental | Can add any rental
vacation | rental | Can change any rental
vacation | rental | Can delete any rental
vacation | rental | Can add own rental
vacation | rental | Can change own rental
vacation | rental | Can delete own rental

Возможное решение

Как инфраструктура решит, принадлежит ли аренда (или что-то еще) пользователю? Я думаю, он проверяет класс vacation.Rental , чтобы узнать, есть ли у него от ForeignKey до auth.User (возможно, имеющий какое-то конкретное имя, например 'owner ').

  • При создании нового отпуска.Аренда , значение поля ForeignKey будет принудительно присвоено идентификатору текущего пользователя. Поле ForeignKey не будет отображаться в форме.

  • В листинге аренды будут отображаться только арендные платы с ForeignKey , соответствующие текущему пользователю.

  • При изменении аренды, будут отображаться только арендные платы с ForeignKey , совпадающими с текущим пользователем. Поле ForeignKey не будет отображаться в форме.

Конечно, это должно работать для любой модели, имеющей соответствующее поле ForeignKey , а не только для нашего отпуск.Аренда модель.

Звучит ли это пока выполнимо, или мне следует пойти в другом направлении?


Сложности

А теперь самое сложное; Я' Я не знаю, как с этим справиться. Допустим, у Rental может быть много «RentalPhotos». RentalPhoto имеет ForeignKey на Аренда . Пользователи должны иметь возможность добавлять фотографии в свои взятые напрокат фотографии. Однако у фотографий нет пользователя ForeignKey , поэтому нет возможности напрямую узнать, кому принадлежит фотография.

Можно ли решить эту проблему с помощью некоторых уловок в структуре, следуя ForeignKey s, пока не будет найден объект с ForeignKey пользователю? Или мне следует выбрать более легкий выход и передать RentalPhoto (и все остальное, «принадлежащее» Rental ) свой собственный ForeignKey соответствующему автору. Пользователь ? Второй подход потребует ненужной избыточности, первый, вероятно, потребует ненужных накладных расходов на обработку ...

Если я полностью сбился с пути, пожалуйста, не стесняйтесь указать мне правильное направление. Заранее благодарим за любую помощь.

14
задан Dagg Nabbit 11 September 2010 в 16:47
поделиться