管理部门数据级过滤器优化

This commit is contained in:
ahui
2025-08-22 18:03:51 +08:00
parent 6e9b94aed2
commit fa734dd479

View File

@@ -206,18 +206,21 @@ class DataLevelPermissionsSubFilter(DataLevelPermissionsFilter):
def _extracted_from_filter_queryset_33(self, request:Request, queryset, api, method): def _extracted_from_filter_queryset_33(self, request:Request, queryset, api, method):
u:Users = request.user u:Users = request.user
manage_depts = u.manage_dept.all() if u.is_superuser:
if not manage_depts:
return queryset return queryset
dept_list = [] dept_list = []
for dept in manage_depts: # 自己部门 交 管理部门
if u.manage_dept.exists(): # 兼容旧数据
for dept in u.manage_dept.all():
dept_list.extend(recursion_down_fast(dept, 'parent', 'id')) dept_list.extend(recursion_down_fast(dept, 'parent', 'id'))
else:
dept_list = recursion_down_fast(u.dept, 'parent', 'id')
dept_list = set(recursion_down_fast(u.dept)) & set(dept_list)
# 自己创建的数据要能看到 # 自己创建的数据要能看到
# 应对归属a管b、c等情况如果自己创建数据则是a不显式指定自己的数据就查不到 # 应对归属a管b、c等情况如果自己创建数据则是a不显式指定自己的数据就查不到
if queryset.model._meta.model_name == 'dept': if queryset.model._meta.model_name == 'dept':
return queryset.filter(Q(id__in=set(dept_list)) | Q(creator=u)) return queryset.filter(Q(id__in=dept_list) | Q(creator=u))
return queryset.filter(Q(dept_belong_id__in=set(dept_list)) | return queryset.filter(Q(dept_belong_id__in=dept_list) | Q(creator=u))
Q(creator=u))
class DataLevelPermissionMargeFilter(DataLevelPermissionsFilter): class DataLevelPermissionMargeFilter(DataLevelPermissionsFilter):