Django之viewsets.ModelViewSet 重写权限

class QuestionnaireViewSet(viewsets.ModelViewSet):
    queryset = Questionnaire.objects.filter()
    serializer_class = QuestionnaireSerializer

    filter_backends = (filters.DjangoFilterBackend, filters.SearchFilter, filters.OrderingFilter)

    filter_fields = ("enterprise_id", "owners__id", "category_id", "owner_user_id")
    # 自定义permission_classes_by_action变量,重写get_permissions来给不同的动作设置不同的权限
    permission_classes_by_action = {'default': [StarOrStaffPermission],
                                    'update': [StarOrStaffPermission],
                                    'destroy': [StarOrStaffPermission],
                                    'questionnaire_question_list': [],
                                    'list': [],
                                    'user_questionnaire_list': []
                                    }
    # 重写get_permissions
    def get_permissions(self):
        try:
            # return permission_classes depending on `action`
            return [permission() for permission in self.permission_classes_by_action[self.action]]
        except KeyError:
        	# 没用明确权限的话使用默认权限
            # action is not set return default permission_classes
            return [permission() for permission in self.permission_classes_by_action['default']]

看一下get_permissions()源码:

同样是返回权限列表

    def get_permissions(self):
        """
        Instantiates and returns the list of permissions that this view requires.
        """
        return [permission() for permission in self.permission_classes]

再看一下ModelViewSet的模型混入类组成
官方文档:https://www.django-rest-framework.org/api-guide/generic-views/#mixins

class ModelViewSet(mixins.CreateModelMixin,
                   mixins.RetrieveModelMixin,
                   mixins.UpdateModelMixin,
                   mixins.DestroyModelMixin,
                   mixins.ListModelMixin,
                   GenericViewSet):
    """
    A viewset that provides default `create()`, `retrieve()`, `update()`,
    `partial_update()`, `destroy()` and `list()` actions.
    """
    pass

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值