使用 django-rest-framework 设置对象级权限
Set object-level permission with django-rest-framework
尝试使用 django-rest-framework 尽可能干净和规范地管理 django-guardian 对象级权限。
我想将对象的读取权限 (module.view_object) 分配给在执行 POST 时发出请求的用户。
我基于 class 的观点:
class ObjectList(ListCreateAPIView):
queryset = Object.objects.all()
serializer_class = ObjectSerializer
filter_backends = (DjangoObjectPermissionsFilter,)
# MyObjectPermissions inherit from DjangoObjectPermissions and just
# add the 'view_model' permission
permission_classes = (MyObjectPermissions,)
def perform_create(self, serializer):
serializer.save(owner=self.request.user)
如 django-rest-framework documentation 中所述,我已重载 perform_create
以便将用户传递给序列化程序。
但是我如何在序列化程序中分配权限(使用 guardian.shortcuts.assign_perm)。难道没有别的办法只能重写save
方法手动分配权限吗?难道没有某种标准机制来管理这种常见行为吗?
您可以在ViewSet
的perform_create()
方法中分配权限。
尝试使用 django-rest-framework 尽可能干净和规范地管理 django-guardian 对象级权限。
我想将对象的读取权限 (module.view_object) 分配给在执行 POST 时发出请求的用户。
我基于 class 的观点:
class ObjectList(ListCreateAPIView):
queryset = Object.objects.all()
serializer_class = ObjectSerializer
filter_backends = (DjangoObjectPermissionsFilter,)
# MyObjectPermissions inherit from DjangoObjectPermissions and just
# add the 'view_model' permission
permission_classes = (MyObjectPermissions,)
def perform_create(self, serializer):
serializer.save(owner=self.request.user)
如 django-rest-framework documentation 中所述,我已重载 perform_create
以便将用户传递给序列化程序。
但是我如何在序列化程序中分配权限(使用 guardian.shortcuts.assign_perm)。难道没有别的办法只能重写save
方法手动分配权限吗?难道没有某种标准机制来管理这种常见行为吗?
您可以在ViewSet
的perform_create()
方法中分配权限。