如何在DRF视图集中捕获请求?

时间:2016-01-23 22:58:13

标签: python django django-rest-framework

所以我有这个:

class UserViewSet(viewsets.ModelViewSet):
    permission_classes = [TokenHasReadWriteScope]
    queryset = User.objects.all()
    serializer_class = UserSerializer
    entity_name = 'user'
    perm_type = {
        'POST': 'create',
        'GET': 'read',
        'PATCH': 'update',
        'DELETE': 'delete'
    }

    def check_permissions(self, request):
        user = request.user
        has_permissions = user.has_entity_permissions(
            name=self.entity_name,
            perm_type=self.perm_type[request.method]
        )
        if not has_permissions:
            raise PermissionDenied

    def create(self, request, *args, **kwargs):
        self.check_permissions(request)
        return super().create(request, *args, **kwargs)

    def list(self, request, *args, **kwargs):
        self.check_permissions(request)
        return super().list(request, *args, **kwargs)

   def update(self, request, *args, **kwargs):
        self.check_permissions(request)
        return super().update(request, *args, **kwargs)

我有一个自定义安全服务器,目的是集中公司的所有应用程序,所以当我们有一个新员工时,我们可以让他访问每个实体中具有不同权限的不同应用程序及其属性。单个应用程序而不是创建用户并在每个应用程序中授予他权限。

所以基本上在" check_permission"函数我检查这个,取决于请求方法(perm_type关联请求方法与权限(CRUD))

问题: 有一种方法可以在进入列表,检索,创建,更新或删除之前捕获请求(Middlewears不工作因为我需要知道实体类型或端点,这就是为什么我设置了entity_name变量,但是如果你有更好的主意欢迎)

1 个答案:

答案 0 :(得分:0)

为什么在APIView课程已经实施check_permissions时覆盖您的操作方法? (ModelViewSet继承自)

只需通过覆盖代码来添加您的代码。