【发布时间】:2019-02-26 13:23:17
【问题描述】:
我正在尝试使用django rules 在 django 和 django 管理界面中配置对象权限。
现在,当我添加权限规则时,它们将始终只使用第一个参数调用,但对象始终为 None。
例如,如果我要创建这个谓词:
@rules.predicate
def is_book_author(user, book):
return book.author == user
然后将其添加到django权限集中:
rules.add_perm('books.view_book', is_book_author)
现在,当我使用用户登录管理界面时,将使用用户调用 is_book_author,并且没有。它将被多次调用(每个对象一次),但对象始终为 None。
我在 django 2.1.1 和 python 3.7 中使用规则 2.0.0。
如果我做错了什么或如何配置 django 以使用单个对象调用谓词有什么想法吗?
【问题讨论】:
-
好吧,当时这本书还不存在。
add_book是添加图书的权限,而不是“保存”图书的权限。我认为你应该在表单中处理这个问题(或者甚至在表单中只是“注入”用户,这样他/她就可以简单地从不添加其他数据)。 -
感谢您的评论,但我对所有 4 个权限都有问题。我用 view_book 权限替换了问题中的 add_book 以进行澄清。
-
@BluE 我正在尝试解决您的问题,但一切对我来说都很好。我使用 testapp 对其进行了调试,但仍然无法重现您的问题。您能否提供将
ObjectPermissionsModelAdmin和add_perm与谓词一起使用的整个文件?还可以查看github.com/dfunckt/django-rules/blob/v2.0.0/tests/testapp/… 尝试将您的代码与 repo 中的代码进行比较。 -
@KamilNiski 我将在今天下班后更新问题以添加所需的信息。快速提问:当您尝试该示例时,您使用的是相同的 django 版本吗?
-
是的,我使用的库版本与您指定的完全相同
标签: python django permissions rules