2016-10-19 5 views
0

Предположим, у меня есть пользователи, проекты, членства и в каждом членстве задана роль (например: admin, только для чтения, пользователь и т. Д.). Членство определяет связь между пользователями и проектами и соответствующую роль.Django: Complex Permission Model

Теперь у меня есть проблема: как я могу использовать систему разрешений Django, чтобы гарантировать, что только администраторы могут редактировать проекты, а другие роли не могут редактировать проекты? Шаблон списка

Проект должен выглядеть следующим образом:

{% for project in object_list %} 
    {# user.has_perm('edit_project', project) #} 
{% endfor %} 

Что такое лучший способ сделать это? Как я могу реализовать разрешение на основе роли членства?

ответ

1

Вам необходимо создать собственную систему разрешений.

Встроенная система разрешения Django не подходит для того, что вы хотите сделать.

Построение моделей для Project. Создайте взаимосвязь ManyToMany между User и моделью Projectthrough a Membership. Эта модель членства будет иметь поле role.

https://docs.djangoproject.com/en/1.10/topics/db/models/#extra-fields-on-many-to-many-relationships имеет пример, который идеально подходит для ваших нужд.

Вы не можете сделать user.has_perm('edit_project', project) в шаблоне. Шаблоны Django не позволяют напрямую обращаться к функциям с несколькими параметрами. Я думаю, что в вашем случае пользовательский тег шаблона, который принимает экземпляр User, экземпляр Project, и строка, описывающая требуемое разрешение, будет способом.

+0

Благодарим вас за ответ :-) Теперь он работает как шарм. –

 Смежные вопросы

  • Нет связанных вопросов^_^