Skip to content

Commit

Permalink
perf: use list_subject_groups_detail instead of `list_subject_all_g…
Browse files Browse the repository at this point in the history
…roup` (#2775)
  • Loading branch information
nannan00 authored Aug 13, 2024
1 parent ec41fa7 commit efd789a
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 5 deletions.
8 changes: 3 additions & 5 deletions saas/backend/api/management/v2/views/subject.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
from backend.apps.subject_template.models import SubjectTemplateGroup
from backend.biz.group import GroupBiz
from backend.common.error_codes import error_codes
from backend.component.iam import list_all_subject_groups
from backend.component.iam import list_subject_groups_detail
from backend.service.constants import GroupMemberType
from backend.service.models import Subject
from backend.util.time import utc_string_to_timestamp
Expand Down Expand Up @@ -134,16 +134,14 @@ def _get_subject_group_dict(subject: Subject, group_ids: List[int]) -> Dict[int,
"""
从后台查询加入的用户组详情
"""
# Note: 可能有性能问题,部分用户加入的用户组可能过多,后续可考虑后台支持 group_ids 过滤查询
# 这里参考了 [web api] /api/v1/roles/group_members/<subject_type>/<subject_id>/groups/
groups = list_all_subject_groups(subject.type, subject.id)
# Note: 后台支持 group_ids 过滤查询,但最多 100,数据量过多则需要分多次查询
groups = list_subject_groups_detail(subject.type, subject.id, group_ids)
return {
int(one["id"]): {
"expired_at": one["expired_at"],
"created_at": utc_string_to_timestamp(one["created_at"]),
}
for one in groups
if int(one["id"]) in group_ids
}

@swagger_auto_schema(
Expand Down
13 changes: 13 additions & 0 deletions saas/backend/component/iam.py
Original file line number Diff line number Diff line change
Expand Up @@ -603,6 +603,19 @@ def unfreeze_subjects(subjects: List[Dict]) -> None:
return _call_iam_api(http_delete, url_path, data=subjects)


def list_subject_groups_detail(subject_type: str, subject_id: str, group_ids: List[int]) -> List[Dict]:
"""
查询Subject与用户组的详情(包括加入时间和过期时间)
"""
url_path = "/api/v1/web/subjects-groups/detail"
data = {
"type": subject_type,
"id": subject_id,
"group_ids": ",".join(map(str, group_ids)),
}
return _call_iam_api(http_get, url_path, data=data)


def check_subject_groups_belong(subject_type: str, subject_id: str, group_ids: List[int]) -> Dict[str, bool]:
"""
校验Subject与用户组是否存在关系
Expand Down

0 comments on commit efd789a

Please sign in to comment.