
我正在尝试使用django rules在django和django管理界面中配置对象权限.
现在,当我添加权限规则时,它们将始终仅使用第一个参数调用,但对象始终为None.
例如,我是否会创建此谓词:
@rules.predicatedef is_book_author(user,book): return book.author == user然后将其添加到django权限集:
rules.add_perm('books.vIEw_book',is_book_author)现在,当我与用户登录管理界面时,将使用用户和None调用is_book_author.它将被多次调用(每个对象一次),但对象始终为None.
我正在使用规则2.0.0与django 2.1.1和python 3.7.
如果我做错了什么或如何配置django以使用单个对象调用谓词,任何想法?
最佳答案正如django-rules documentation所述:Django admin does not support object-permissions,in the sense that it will never ask for permission to perform an action on an object,only whether a user is allowed to act on (any) instances of a model.
如果您想告诉Django用户是否拥有特定对象的权限,您必须覆盖模型的Modeladmin的以下方法:
has_vIEw_permission(user,obj=None)has_change_permission(user,obj=None)has_delete_permission(user,obj=None)规则附带一个自定义的Modeladmin子类rules.contrib.admin.ObjectPermissionsModeladmin,它覆盖这些方法以将已编辑的模型实例传递给授权后端,从而在admin中启用每个对象的权限:
# books/admin.pyfrom django.contrib import adminfrom rules.contrib.admin import ObjectPermissionsModeladminfrom .models import Bookclass Bookadmin(ObjectPermissionsModeladmin): passadmin.site.register(Book,Bookadmin)现在,这允许您指定如下权限:
rules.add_perm('books',rules.always_allow)rules.add_perm('books.add_book',has_author_profile)rules.add_perm('books.change_book',is_book_author_or_editor)rules.add_perm('books.delete_book',is_book_author)为了保持向后兼容性,Django将要求查看或更改权限.为了获得最大的灵活性,规则的行为略有不同:当且仅当视图权限不存在规则时,规则才会要求更改权限. 总结
以上是内存溢出为你收集整理的python – Django规则对象权限全部内容,希望文章能够帮你解决python – Django规则对象权限所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)