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

95 lines
3.3 KiB

import logging
import traceback
from rest_framework.viewsets import ModelViewSet
from ChaCeRndTrans.basic import CCAIResponse
from ChaCeRndTrans.code import OK
from ..models import Permission
from ..serializers.permission_serializer import PermissionListSerializer
from utils.custom import CommonPagination, RbacPermission, TreeAPIView, CustomViewBase
from rest_framework.filters import SearchFilter, OrderingFilter
from rest_framework_jwt.authentication import JSONWebTokenAuthentication
from operator import itemgetter
err_logger = logging.getLogger('error')
class PermissionViewSet(CustomViewBase, TreeAPIView):
"""
权限:增删改查
"""
perms_map = ({"*": "admin"}, {"*": "permission_all"}, {"get": "permission_list"}, {"post": "permission_create"},
{"put": "permission_edit"}, {"delete": "permission_delete"})
queryset = Permission.objects.all()
serializer_class = PermissionListSerializer
pagination_class = CommonPagination
filter_backends = (SearchFilter, OrderingFilter)
search_fields = ("name",)
ordering_fields = ("id",)
authentication_classes = (JSONWebTokenAuthentication,)
permission_classes = (RbacPermission,)
def list(self, request, *args, **kwargs):
tree_dict = get_all_permission_dict()
tree_data = []
for i in tree_dict:
if tree_dict[i]["pid"]:
pid = tree_dict[i]["pid"]
parent = tree_dict[pid]
parent.setdefault("children", []).append(tree_dict[i])
parent["children"] = sorted(parent["children"], key=itemgetter("id"))
else:
tree_data.append(tree_dict[i])
return CCAIResponse(tree_data, status=OK)
class PermissionTreeView(TreeAPIView):
"""
权限树
"""
queryset = Permission.objects.all()
def list(self, request, *args, **kwargs):
"""
根据是否前后台用户返回除去内部权限
"""
if 1 == request.user.label:
self.queryset = Permission.objects.filter(label=1)
response = super().list(request, *args, **kwargs)
return response
def get_all_permission_dict():
"""
获取所有菜单数据,重组结构
"""
try:
permission = Permission.objects.all()
serializer = PermissionListSerializer(permission, many=True)
tree_dict = {}
for item in serializer.data:
if item["pid"] is None:
top_permission = {
"id": item["id"],
"name": item["name"],
"method": item["method"],
"pid": item["pid"],
"label": item["label"],
"children": []
}
tree_dict[item["id"]] = top_permission
else:
children_permission = {
"id": item["id"],
"name": item["name"],
"pid": item["pid"],
"method": item["method"],
"label": item["label"],
}
tree_dict[item["id"]] = children_permission
return tree_dict
except Exception as e:
err_logger.error("get all menu from role failed: \n%s" % traceback.format_exc())
return tree_dict