import logging import traceback from rest_framework.viewsets import ModelViewSet, GenericViewSet from rest_framework import mixins from ChaCeRndTrans.code import BAD, SERVER_ERROR from ..models import Role from ..serializers.role_serializer import RoleListSerializer, RoleModifySerializer from utils.custom import CommonPagination, RbacPermission, CustomViewBase from rest_framework.filters import SearchFilter, OrderingFilter from rest_framework_jwt.authentication import JSONWebTokenAuthentication from rest_framework.permissions import IsAuthenticated from utils.custom import CCAIResponse logger = logging.getLogger('error') class RoleViewSet(CustomViewBase): """ 角色管理:增删改查 """ perms_map = ( {"*": "admin"}, {"*": "role_all"}, {"get": "role_list"}, {"post": "role_create"}, {"put": "role_edit"}, {"delete": "role_delete"} ) queryset = Role.objects.all().order_by('id') serializer_class = RoleListSerializer pagination_class = CommonPagination filter_backends = (SearchFilter, OrderingFilter) search_fields = ("name",) ordering_fields = ("id",) authentication_classes = (JSONWebTokenAuthentication,) permission_classes = (RbacPermission,) def get_serializer_class(self): if self.action == "list": return RoleListSerializer return RoleModifySerializer def get_queryset(self): """ 后台角色列表 返回后台角色(label=2)与前台默认角色(label=1,companyMid==None) """ label = self.request.query_params.get('label', None) # 1-前台默认角色 2-后台角色列表 queryset = Role.objects.all() if not label or int(label) not in (1, 2): return queryset if 1 == int(label): queryset = queryset.filter(label=1, companyMid__isnull=True) else: queryset = queryset.filter(label=2) return queryset def list(self, request, *args, **kwargs): try: queryset = self.filter_queryset(self.get_queryset()) page = self.paginate_queryset(queryset) if page is not None: serializer = self.get_serializer(page, many=True) return self.get_paginated_response(serializer.data) serializer = self.get_serializer(queryset, many=True) return CCAIResponse(data=serializer.data) except Exception as e: logger.error("user: %s, get role list failed: \n%s" % (request.user.id, traceback.format_exc())) return CCAIResponse("get list failed: \n %s" % e, SERVER_ERROR)