Django:复杂的权限模型
Django: Complex Permission Model
假设我有用户、项目、成员资格,并且在每个成员资格中指定了一个角色(例如:管理员、只读、用户等)。成员资格定义了用户和项目之间的关系以及相应的角色。
现在有个问题:如何利用Django的权限系统保证只有管理员可以编辑项目,其他角色不能编辑项目?
项目列表模板应如下所示:
{% for project in object_list %}
{# user.has_perm('edit_project', project) #}
{% endfor %}
最好的方法是什么?如何实现基于成员角色的权限?
您需要建立自己的权限系统。
Django 的内置权限系统不适合你想做的事情。
为 Project
建立模型。在 User
和 Project
through
和 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
实例和描述所需权限的字符串的自定义模板标签将是可行的方法。
假设我有用户、项目、成员资格,并且在每个成员资格中指定了一个角色(例如:管理员、只读、用户等)。成员资格定义了用户和项目之间的关系以及相应的角色。
现在有个问题:如何利用Django的权限系统保证只有管理员可以编辑项目,其他角色不能编辑项目?
项目列表模板应如下所示:
{% for project in object_list %}
{# user.has_perm('edit_project', project) #}
{% endfor %}
最好的方法是什么?如何实现基于成员角色的权限?
您需要建立自己的权限系统。
Django 的内置权限系统不适合你想做的事情。
为 Project
建立模型。在 User
和 Project
through
和 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
实例和描述所需权限的字符串的自定义模板标签将是可行的方法。