我正在尝试使用django-rules创建第一个实现,遵循自述文件中的指南。
从一些基本概念开始,我想将记录的删除限制为仅在我的应用程序中的记录所有者contact
。我设法(似乎)使用通过 Django REST Framework 提供的 API 来处理事情。但是,当我使用非超级用户打开 Django Admin 时,我收到以下错误:
AttributeError:“NoneType”对象没有属性“created_by”
这似乎与我的谓词定义有关contact/rules.py
(我尝试遵循此处的 django-rules 文档中的“书籍示例” ):
import rules
@rules.predicate
def is_contact_owner(user, contact):
return contact.created_by == user
@rules.predicate
def is_address_owner(user, address):
return address.created_by == user
rules.add_perm("contact.view_contact", rules.is_staff)
rules.add_perm("contact.add_contact", rules.is_staff)
rules.add_perm("contact.change_contact", rules.is_staff)
rules.add_perm("contact.delete_contact", is_contact_owner)
rules.add_perm("contact.view_address", rules.is_staff)
rules.add_perm("contact.add_address", rules.is_staff)
rules.add_perm("contact.change_address", rules.is_staff)
rules.add_perm("contact.delete_address", is_address_owner)
我的contact/admin.py
样子如下:
from django.contrib import admin
from rules.contrib.admin import ObjectPermissionsModelAdmin
# Register your models here.
from .models import Address, Contact
@admin.register(Address)
class AddressAdmin(ObjectPermissionsModelAdmin):
# class AddressAdmin(admin.ModelAdmin):
list_display = (
"id",
"local_address",
"country",
"uuid",
"created",
"modified",
"created_by",
"modified_by",
)
date_hierarchy = "created"
list_filter = ["created", "modified", "country"]
@admin.register(Contact)
class ContactAdmin(ObjectPermissionsModelAdmin):
# class ContactAdmin(admin.ModelAdmin):
list_display = (
"id",
"last_name",
"first_name",
"date_of_birth",
"uuid",
"created",
"modified",
"created_by",
"modified_by",
)
date_hierarchy = "created"
list_filter = ["created", "modified"]
谁能给我指点一下这里可能会失败的地方?