Разрешения на основе роли Django зависят от проекта.

Привет, я работаю над Django, чтобы создать приложение для управления проектами, так как у меня 100 пользователей и более 50 проектов. где один пользователь участвует в нескольких проектах с разной ролью. Теперь, как дать разрешение на основе роли проекта?

Например. Допустим, пользователь "Арнольд" работает над "[проект-А в качестве менеджера, проект-В в качестве поставщика, проект-В в качестве исполнителя]", * Как менеджер Арнольд получит все разрешения в проекте-А, * Как поставщик Арнольд получит разрешения только для чтения в project-B, * Как художник Арнольд получит разрешения на чтение, запись и обновление в project-C,

Итак, теперь скажите мне, как я могу разработать модель отношения, как указано выше?

1 ответ

Решение

Вот как я подхожу к этому.

Начните со стандартного объекта User из django (я всегда использую его для своего пользователя, а затем абстрагируюсь оттуда).

Затем я бы создал объект Roles. Роль имеет имя, такое как продавец, владелец, исполнитель и т. Д.

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

class Role(...):
    name = models.CharField(...)

class Project(...):
     ...

class ProjectParticipant(...):
     user = models.ForeignKey(User)
     role = models.ForeignKey(Role)
     project = models.ForeignKey(Project)

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

Другие вопросы по тегам