简体   繁体   English

在 drf 中的多个自定义权限类之间传递变量

[英]pass a variable between multiple custom permission classes in drf

I have a base permission class that two ViewSets are sharing and one other permission class each that is custom to each of the ViewSets, so 3 permissions all together, is there a way to pass a specific variable down from the base permission class to the other permission classes?我有一个基本权限 class 两个 ViewSets 共享和一个其他权限 class 每个都是自定义的每个 ViewSets,所以 3 个权限一起,有没有办法从基本权限 ZA2F2ED4F8EBC2CBBD1Z21A2 向下传递特定变量权限类? My setup looks like this:我的设置如下所示:

class BasePerm(permissions.BasePermission):
    def has_permission(self, request, view):
        some_var = # call an API using request variable

class Perm1(permissions.BasePermission):
    def has_permission(self, request, view):
        # get the value of some_var from BasePerm


class Perm2(permissions.BasePermission):
    def has_permission(self, request, view):
        # get the value of some_var from BasePerm


class MyViewSet1(mixins.CreateModelMixin, viewsets.GenericViewSet):
    permission_classes = [BasePerm, Perm1]


class MyViewSet2(mixins.CreateModelMixin, viewsets.GenericViewSet):
    permission_classes = [BasePerm, Perm2]

i don't understand why you don't use mixin.我不明白你为什么不使用mixin。 For you ask:你问:

class BasePerm(permissions.BasePermission):

    def has_permission(self, request, view):
        self.some_var = # call an API using request variable
        return True

class Perm1(BasePerm):

    def has_permission(self, request, view):
        # get the value of some_var from BasePerm
        return super().has_permission(request, view) and some_staff_with(self.some_var)


class Perm2(BasePerm):

    def has_permission(self, request, view):
        # get the value of some_var from BasePerm
        return super().has_permission(request, view) and some_other_staff_with(self.some_var)

class MyViewSet1(mixins.CreateModelMixin, viewsets.GenericViewSet):
    permission_classes = [Perm1]


class MyViewSet2(mixins.CreateModelMixin, viewsets.GenericViewSet):
    permission_classes = [Perm2]

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

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