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.
74 lines
2.6 KiB
74 lines
2.6 KiB
|
10 months ago
|
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)
|