繁体   English   中英

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

[英]How to catch a request in a DRF viewset?

所以我有这个:

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变量,但是如果您有欢迎有更好的主意)

当您已经通过APIView类实现了check_permissions时,为什么要覆盖您的action方法? ModelViewSet继承自该对象)

只需通过重写即可添加代码安全性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM