独角鲸同步合作方公司数据项目
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

73 lines
2.6 KiB

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)