【问题标题】:read permissions in djangodjango中的读取权限
【发布时间】:2014-10-07 10:18:24
【问题描述】:

我对我的权限选项感到困惑。看来我可以直接在模型上写权限,我可以在我的视图上使用 permission_required 装饰器,我可以在我的模板中使用 {{ perms }} 变量。

Q1:这些是打算一起使用,相互加强,还是它们是独立的选项,甚至可能是相互排斥的,或冗余的,因此不是 DRY?

Q2:当用户可以访问模型 1 但不能访问模型 2(其中 1 和 2 彼此具有外键关系)时会发生什么?即使用户不直接访问 Model 2,查找是否也会自动被阻止(权限被拒绝)?如果其中一些内容出现在现场搜索请求中怎么办?

Q3:我很确定我不需要或不想要对象、字段或行级别的权限——除非这是拒绝访问 FK 的最佳方式?

【问题讨论】:

    标签: python django permissions user-permissions


    【解决方案1】:

    A1:Django 带有三个默认权限“添加”、“更改”和“删除”。从管理站点,每个权限都可以让您分别访问“添加”、“更改”和“删除”表单。因此,一个与另一个无关。这就是这三个权限在 Django 核心中的实现方式。但是,您可以根据需要添加自己的自定义权限,例如“view”、“foo”、“can_search”等。权限只不过是一个标志,重要的是如何实现响应这些自定义的行为权限。例如,您可以说测试user.has_perm(myapp.can_search.MyModel),如果通过,则用户可以搜索,否则用户无法搜索。因此,自定义权限的实现取决于您。

    A2:要再次回答这个问题,这取决于实现。

    A3:为什么要拒​​绝访问 FK?您需要定义对模型的访问,我认为这可以解决您的问题。顺便说一下,对象级权限是按对象实例定义的,并且与 FK 无关。例如,如果您有 200 个项目并且您有一个 project#10 的实例,那么您可以通过对象权限测试来查看用户是否具有该特定项目实例的权限。

    无论如何,您可以在https://docs.djangoproject.com/en/dev/topics/auth/default/#topic-authorization 阅读有关权限的更多信息,对于对象权限,您可以查看https://pythonhosted.org/django-guardian/。此外,这个网站上有很多关于 Django 权限的帖子。

    【讨论】:

    • 我知道我必须编写自己的读取权限。我在询问模型、视图和模板的权限之间的关系。我不是在问 CRUD。我不知道我是否想阻止 FK,这是个问题。我也知道这里还有其他关于 SO 的权限问题。当我发布问题时,会显示以前具有相似关键字的问题。我看着他们,并没有看到我仍然存在的问题的答案。
    猜你喜欢
    • 2013-05-15
    • 1970-01-01
    • 2018-09-21
    • 1970-01-01
    • 2011-01-17
    • 2016-11-10
    • 1970-01-01
    • 2015-12-26
    • 1970-01-01
    相关资源
    最近更新 更多