Django:复杂权限模型

时间:2016-10-19 11:29:35

标签: python django permissions acl

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

现在我遇到了一个问题:如何使用Django的权限系统来确保只有管理员可以编辑项目而其他角色不允许编辑项目?

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

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

这样做的最佳方式是什么?如何根据成员资格角色实施权限?

1 个答案:

答案 0 :(得分:1)

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

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

Project构建模型。在UserProject throughMembership模型之间创建ManyToMany关系。此会员资格模型将包含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实例以及描述所需权限的字符串将是最佳选择。