From 3dcef90bbe9ea0377898b3e461909c37fb4c2d68 Mon Sep 17 00:00:00 2001 From: lxy <46486798@qq.com> Date: Tue, 9 Jul 2024 03:56:45 +0000 Subject: [PATCH] =?UTF-8?q?update=20backend/dvadmin/utils/field=5Fpermissi?= =?UTF-8?q?on.py.=20=E4=BF=AE=E5=A4=8D=E4=B8=80=E4=B8=AA=E8=B4=A6=E5=8F=B7?= =?UTF-8?q?=E6=8B=A5=E6=9C=89=E5=A4=9A=E4=B8=AA=E8=A7=92=E8=89=B2=E6=9D=83?= =?UTF-8?q?=E9=99=90=EF=BC=8C=E5=AF=BC=E8=87=B4=E5=89=8D=E7=AB=AF=E6=9F=90?= =?UTF-8?q?=E4=BA=9B=E6=A8=A1=E5=9D=97=E6=B2=A1=E5=A4=84=E7=90=86=E5=A5=BD?= =?UTF-8?q?=E5=AF=BC=E8=87=B4=E7=9A=84=E6=97=A0=E6=9D=83=E9=99=90=E9=97=AE?= =?UTF-8?q?=E9=A2=98=EF=BC=88=E5=9C=B0=E5=8C=BA=E7=AE=A1=E7=90=86=E3=80=81?= =?UTF-8?q?=E7=99=BB=E5=BD=95=E6=97=A5=E5=BF=97=EF=BC=89=EF=BC=8C=E5=90=88?= =?UTF-8?q?=E5=B9=B6=E6=9D=83=E9=99=90=EF=BC=8C=E4=B8=8D=E5=86=8D=E8=BF=94?= =?UTF-8?q?=E5=9B=9E=E5=A4=9A=E4=B8=AA=E7=9B=B8=E5=90=8C=E7=9A=84=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=E5=90=8D=E6=9D=83=E9=99=90=EF=BC=8C=E7=9B=B8=E5=90=8C?= =?UTF-8?q?=E5=AD=97=E6=AE=B5=E5=90=8D=E7=9A=84=E6=9D=83=E9=99=90True?= =?UTF-8?q?=E5=80=BC=E4=BF=9D=E7=95=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: lxy <46486798@qq.com> --- backend/dvadmin/utils/field_permission.py | 33 +++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/backend/dvadmin/utils/field_permission.py b/backend/dvadmin/utils/field_permission.py index 20b4cb95..7c259f68 100644 --- a/backend/dvadmin/utils/field_permission.py +++ b/backend/dvadmin/utils/field_permission.py @@ -1,4 +1,7 @@ # -*- coding: utf-8 -*- + +from itertools import groupby + from django.db.models import F from rest_framework.decorators import action from rest_framework.permissions import IsAuthenticated @@ -35,4 +38,34 @@ class FieldPermissionMixin: data= FieldPermission.objects.filter( field__model=model['model'],role__in=roles ).values( 'is_create', 'is_query', 'is_update',field_name=F('field__field_name')) + + """ + 合并权限 + + 这段代码首先根据 field_name 对列表进行排序, + 然后使用 groupby 按 field_name 进行分组。 + 对于每个组,它创建一个新的字典 merged, + 并遍历组中的每个字典,将布尔值字段使用逻辑或(or)操作符进行合并(如果 merged 中还没有该字段,则默认为 False), + 其他字段(如 field_name)则直接取组的关键字(即 key) + """ + + # 使用field_name对列表进行分组, # groupby 需要先对列表进行排序,因为它只能对连续相同的元素进行分组。 + grouped = groupby(sorted(list(data), key=lambda x: x['field_name']), key=lambda x: x['field_name']) + + data = [] + + # 遍历分组,合并权限 + for key, group in grouped: + + # 初始化一个空字典来存储合并后的结果 + merged = {} + for item in group: + # 合并权限, True值优先 + merged['is_create'] = merged.get('is_create', False) or item['is_create'] + merged['is_query'] = merged.get('is_query', False) or item['is_query'] + merged['is_update'] = merged.get('is_update', False) or item['is_update'] + merged['field_name'] = key + + data.append(merged) + return DetailResponse(data=data) \ No newline at end of file -- Gitee