【问题标题】:When to use Django Permissions?何时使用 Django 权限?
【发布时间】:2019-05-29 03:20:50
【问题描述】:

AFAIK,权限不过滤查询集。

Django queryset permissions

那么,如果我必须过滤查询集并返回相关记录,那么权限是什么?有什么过滤不能做的权限吗?

【问题讨论】:

    标签: django django-guardian


    【解决方案1】:

    让我举个例子来简单地解释一下区别。假设您要构建一个供教师和学生使用的学生管理系统。您想要实现一个列出学生的网页。但是你想在这样做的时候调整两个限制:

    1. 如果登录用户是学生,请不要显示任何学生,因为这可能会侵犯隐私。这可以通过 Django 的内置权限来完成。

    2. 如果登录用户是教师,则不要列出所有学生,而只列出已注册该教师课程的学生。这是对象级别的权限,Django 没有为此提供的内置库。您可以自己实现此逻辑,也可以使用 django-guardian 等库。

    【讨论】:

    • 感谢您的回复。但我的问题不是关于 Django 权限与 django-guardian。我想知道为什么必须使用权限。我可以通过调整查询集来完成上述操作。无论如何,我会编辑问题以使其更清楚。
    • Django 有一个内置的身份验证库,其中包括用户、组和权限类。通过使用该 User 类创建应用程序的用户,您可以通过权限轻松地将模型与用户隔离。您还可以通过 reguest.user 验证用户并自己过滤查询集来实现这一点。但是 Django 的这种内置权限方法经过全面测试,安全,易于在单行代码中实现。
    • 再次感谢。 “易于实施”——不,这就是对权限实用性提出质疑的原因。设置对象级权限很痛苦(我采用了这种方法:pragmaticstartup.wordpress.com/2012/06/26/…)。必须为创建的每个对象分配权限,才能使对象级权限正常工作。因此,在创建记录时需要额外的工作以及额外的存储需求,因为权限记录是单独创建的,更不用说正确管理组的开销了。
    • 想象一下,您有一个包含多个角色和用户的庞大应用程序。甚至无需更改代码,您就可以创建更多其他角色并为它们分配自定义策略(您甚至不需要为此实现接口,django 有一个内置的管理页面,您可以处理用户、组和权限),或编辑现有角色的权限等。通过过滤查询集来提供权限将需要数十个控件才能指定用户角色的正确权限级别。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-18
    • 1970-01-01
    • 2019-03-21
    • 2020-04-07
    • 1970-01-01
    • 2017-11-11
    • 1970-01-01
    相关资源
    最近更新 更多