cde*_*win 6 django django-rest-framework django-guardian
为什么 django rest 框架在创建对象时不检查对象权限?用户应该能够创建他们无法看到、更新或删除的对象是没有意义的(无论如何对我来说)。目前我子类化了一个视图集
class CheckCreatePermissionsViewSet(ModelViewSet):
def perform_create(self, serializer):
'''
Called by create before calling serializer.save()
'''
obj = serializer.save()
try:
self.check_object_permissions(obj)
except:
obj.delete()
raise
Run Code Online (Sandbox Code Playgroud)
为什么默认情况下不实现?这让我很头疼,我想不出它会像这样实施的单一原因。
如果您的目的是在用户没有特定权限的情况下不创建对象,您可以在 Viewset 中使用 Permission_classes,这样 Viewset 甚至不允许用户创建对象。
为什么需要根据权限创建然后再次删除?最好先检查权限,这样如果权限失败,对象甚至不会被创建。
例如,您只希望管理员创建对象,您可以添加
permission_classes=[permissions.IsAdminUser]到视图集,这样该控件甚至不会进入perform_create。如果普通用户尝试创建对象,Viewset 将发送 403。希望这是您想要的。
| 归档时间: |
|
| 查看次数: |
1387 次 |
| 最近记录: |