Blu*_*luE 5 python django permissions rules
我正在尝试使用django规则来配置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)
现在,当我与用户登录管理界面时,将使用用户和None调用is_book_author.它将被多次调用(每个对象一次),但对象始终为None.
我正在使用规则2.0.0与django 2.1.1和python 3.7.
如果我做错了什么或如何配置django以使用单个对象调用谓词,任何想法?
如django-rules 文档所述:
Django Admin 不支持对象权限,从某种意义上说,它永远不会征求对对象执行操作的权限,仅允许是否允许用户对模型的(任何)实例进行操作。
如果您想告诉Django用户是否对特定对象具有权限,则必须重写模型的ModelAdmin的以下方法:
Run Code Online (Sandbox Code Playgroud)has_view_permission(user, obj=None) has_change_permission(user, obj=None) has_delete_permission(user, obj=None)规则带有一个自定义
ModelAdmin子类,rules.contrib.admin.ObjectPermissionsModelAdmin该子类会覆盖以下方法,以将已编辑的模型实例传递给授权后端,从而在Admin中启用每个对象的权限:Run Code Online (Sandbox Code Playgroud)# books/admin.py from django.contrib import admin from rules.contrib.admin import ObjectPermissionsModelAdmin from .models import Book class BookAdmin(ObjectPermissionsModelAdmin): pass admin.site.register(Book, BookAdmin)现在,您可以这样指定权限:
Run Code Online (Sandbox Code Playgroud)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将要求查看或更改权限。为了获得最大的灵活性,规则的行为会有所不同:只有且仅当不存在用于视图许可的规则时,规则才会请求更改许可。
| 归档时间: | 
 | 
| 查看次数: | 1089 次 | 
| 最近记录: |