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
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)
|
|
|