Django:复杂的权限模型

Django: Complex Permission Model

假设我有用户、项目、成员资格,并且在每个成员资格中指定了一个角色(例如:管理员、只读、用户等)。成员资格定义了用户和项目之间的关系以及相应的角色。

现在有个问题:如何利用Django的权限系统保证只有管理员可以编辑项目,其他角色不能编辑项目?

项目列表模板应如下所示:

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

最好的方法是什么?如何实现基于成员角色的权限?

您需要建立自己的权限系统。

Django 的内置权限系统不适合你想做的事情。

Project 建立模型。在 UserProject throughMembership 模型之间创建多对多关系。此成员资格模型将有一个 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 实例和描述所需权限的字符串的自定义模板标签将是可行的方法。