feat(20241226-fieldpermission): 优化列权限逻辑
1、优化后端合并权限代码
This commit is contained in:
@@ -1,12 +1,25 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
from django.db.models import F
|
from django.db.models import F
|
||||||
from rest_framework.decorators import action
|
from rest_framework.decorators import action
|
||||||
from rest_framework.permissions import IsAuthenticated
|
from rest_framework.permissions import IsAuthenticated
|
||||||
|
|
||||||
from dvadmin.system.models import FieldPermission, MenuField
|
from dvadmin.system.models import FieldPermission, MenuField
|
||||||
from dvadmin.utils.json_response import DetailResponse
|
from dvadmin.utils.json_response import DetailResponse
|
||||||
from dvadmin.utils.models import get_custom_app_models
|
|
||||||
|
|
||||||
|
def merge_permission(data):
|
||||||
|
"""
|
||||||
|
合并权限
|
||||||
|
"""
|
||||||
|
result = {}
|
||||||
|
for item in data:
|
||||||
|
field_name = item.pop('field_name')
|
||||||
|
if field_name not in result:
|
||||||
|
result[field_name] = item
|
||||||
|
else:
|
||||||
|
for key, value in item.items():
|
||||||
|
result[field_name][key] = result[field_name][key] or value
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
class FieldPermissionMixin:
|
class FieldPermissionMixin:
|
||||||
@@ -15,40 +28,16 @@ class FieldPermissionMixin:
|
|||||||
"""
|
"""
|
||||||
获取字段权限
|
获取字段权限
|
||||||
"""
|
"""
|
||||||
finded = False
|
model = self.serializer_class.Meta.model.__name__
|
||||||
for model in get_custom_app_models():
|
|
||||||
if model['object'] is self.serializer_class.Meta.model:
|
|
||||||
finded = True
|
|
||||||
break
|
|
||||||
if finded:
|
|
||||||
break
|
|
||||||
if finded is False:
|
|
||||||
return []
|
|
||||||
user = request.user
|
user = request.user
|
||||||
# 创建一个默认字典来存储最终的结果
|
# 创建一个默认字典来存储最终的结果
|
||||||
result = {}
|
|
||||||
if user.is_superuser == 1:
|
if user.is_superuser == 1:
|
||||||
data = MenuField.objects.filter(model=model['model']).values('field_name')
|
data = MenuField.objects.filter(model=model).values('field_name')
|
||||||
for item in data:
|
result = {item['field_name']: {"is_create": True, "is_query": True, "is_update": True} for item in data}
|
||||||
field_name = item.pop('field_name')
|
else:
|
||||||
result[field_name] = {}
|
roles = request.user.role.values_list('id', flat=True)
|
||||||
result[field_name]['is_create'] = True
|
data = FieldPermission.objects.filter(
|
||||||
result[field_name]['is_query'] = True
|
field__model=model, role__in=roles
|
||||||
result[field_name]['is_update'] = True
|
).values('is_create', 'is_query', 'is_update', field_name=F('field__field_name'))
|
||||||
else:
|
result = merge_permission(data)
|
||||||
roles = request.user.role.values_list('id', flat=True)
|
|
||||||
data = FieldPermission.objects.filter(
|
|
||||||
field__model=model['model'], role__in=roles
|
|
||||||
).values('is_create', 'is_query', 'is_update', field_name=F('field__field_name'))
|
|
||||||
"""
|
|
||||||
合并权限
|
|
||||||
"""
|
|
||||||
# 遍历原始数据并填充结果字典
|
|
||||||
for item in data:
|
|
||||||
field_name = item.pop('field_name')
|
|
||||||
if field_name not in result:
|
|
||||||
result[field_name] = item
|
|
||||||
else:
|
|
||||||
for key, value in item.items():
|
|
||||||
result[field_name][key] = result[field_name][key] or value
|
|
||||||
return DetailResponse(data=result)
|
return DetailResponse(data=result)
|
||||||
|
|||||||
Reference in New Issue
Block a user