【问题标题】:Django: Complex Permission ModelDjango:复杂的权限模型
【发布时间】:2016-10-19 11:29:34
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: python django permissions acl


    【解决方案1】:

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

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

    Project 构建模型。在 UserProject 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 实例和描述所需权限的字符串的自定义模板标签将是可行的方法。

    【讨论】:

    • 感谢您的回答 :-) 现在它就像一个魅力。
    猜你喜欢
    • 2019-09-15
    • 1970-01-01
    • 1970-01-01
    • 2019-03-19
    • 1970-01-01
    • 2018-03-04
    • 1970-01-01
    • 2016-09-26
    • 1970-01-01
    相关资源
    最近更新 更多