独角鲸同步合作方公司数据项目
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.
 

96 lines
3.9 KiB

import logging
import traceback
from django.db.models import Q
from rest_framework.decorators import action
from rest_framework.filters import SearchFilter, OrderingFilter
from rest_framework.permissions import IsAuthenticated
from rest_framework_jwt.authentication import JSONWebTokenAuthentication
from ChaCeRndTrans.basic import CCAIResponse
from ChaCeRndTrans.code import *
from utils.custom import CommonPagination, RbacPermission, CustomViewBase, req_operate_by_user
from ..models import Role, Company
from ..serializers.role_serializer import RoleListSerializer, FrontRoleModifySerializer
logger = logging.getLogger('error')
class FrontRoleViewSet(CustomViewBase):
"""
前台角色管理:增删改查 (提供前台用户管理自己的公司的角色,所有数据需要绑定公司mid)
"""
perms_map = (
{"*": "admin"},
{"*": "frontRole_all"},
{"get": "frontRole_list"},
{"post": "frontRole_create"},
{"put": "frontRole_edit"},
{"delete": "frontRole_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_queryset(self):
companyMid = self.request.query_params.get('companyMid', None)
queryset = Role.objects.all()
if companyMid:
# 查询该公司自定义角色及默认的前台角色
queryset = queryset.filter(Q(companyMid=companyMid) | (Q(companyMid__isnull=True) & Q(label=1)))
return queryset
def get_serializer_class(self):
if self.action == "list":
return RoleListSerializer
return FrontRoleModifySerializer
def create(self, request, *args, **kwargs):
"""
前台用户自定义角色,绑定公司,label=1(默认为前台角色)
"""
try:
data = req_operate_by_user(request)
companyMid = request.query_params.get('companyMid', None)
if not companyMid:
return CCAIResponse("Missing company information", BAD)
is_com_exist = Company.objects.filter(MainId=companyMid).exists()
if is_com_exist:
data['companyMid'] = companyMid
data['label'] = 1 # 前台角色
serializer = self.get_serializer(data=data)
serializer.is_valid(raise_exception=True)
self.perform_create(serializer)
# headers = self.get_success_headers(serializer.data)
return CCAIResponse(data="success")
else:
return CCAIResponse("Company information error", BAD)
except Exception:
logger.error("user: %s, aigc create failed: \n%s" % (request.user.id, traceback.format_exc()))
return CCAIResponse("create failed", SERVER_ERROR)
@action(methods=["GET"], detail=False, permission_classes=[IsAuthenticated],
url_path="rolelist", url_name="rolelist")
def rolelist(self, request):
"""
获取对应公司的角色,及前台默认角色
"""
try:
companyMid = request.GET.get('companyMid')
if companyMid:
rolelist = Role.objects.filter(
Q(companyMid=companyMid) | (Q(companyMid__isnull=True) & Q(label=1))).values('name', 'id').all()
# serializer = RoleListSerializer(rolelist, many=True)
return CCAIResponse(rolelist)
else:
return CCAIResponse(BAD, msg='公司数据缺失')
except Exception as e:
logger.error(
"user: %s get rolelist failed: \n%s" % (request.user.id, traceback.format_exc()))
return CCAIResponse(msg='获取公司角色列表失败', status=SERVER_ERROR)