Skip to content

Commit

Permalink
feat: manager group list api add only_inherit param
Browse files Browse the repository at this point in the history
  • Loading branch information
zhu327 committed Apr 10, 2024
1 parent 4b23630 commit f40df72
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 5 deletions.
1 change: 1 addition & 0 deletions saas/backend/api/management/v2/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -314,6 +314,7 @@ def get_subject_template_count(self, obj):

class ManagementQueryGroupSLZ(serializers.Serializer):
inherit = serializers.BooleanField(label="是否继承子集管理员的用户组", required=False, default=True)
only_inherit = serializers.BooleanField(label="是否只查询继承子集管理员的用户组", required=False, default=False)


class ManagementGradeManagerCreateSLZ(GradeMangerBaseInfoSLZ):
Expand Down
3 changes: 2 additions & 1 deletion saas/backend/api/management/v2/views/group.py
Original file line number Diff line number Diff line change
Expand Up @@ -153,10 +153,11 @@ def list(self, request, *args, **kwargs):
slz = ManagementQueryGroupSLZ(data=request.query_params)
slz.is_valid(raise_exception=True)
inherit = slz.validated_data["inherit"]
only_inherit = slz.validated_data["only_inherit"]

role = get_object_or_404(self.queryset, id=kwargs["id"])

queryset = RoleListQuery(role).query_group(inherit=inherit)
queryset = RoleListQuery(role).query_group(inherit=inherit, only_inherit=only_inherit)
queryset = self.filter_queryset(queryset)
queryset = self._filter(request, queryset)

Expand Down
13 changes: 9 additions & 4 deletions saas/backend/biz/role.py
Original file line number Diff line number Diff line change
Expand Up @@ -645,25 +645,30 @@ def _query_subset_manager_template_id(self) -> List[int]:

return template_ids

def query_group(self, inherit: bool = True):
def query_group(self, inherit: bool = True, only_inherit: bool = False):
"""
查询用户组列表
"""
if self.role.type == RoleType.STAFF.value:
return Group.objects.filter(hidden=False)

group_ids = self._get_role_related_object_ids(RoleRelatedObjectType.GROUP.value, inherit=inherit)
group_ids = self._get_role_related_object_ids(
RoleRelatedObjectType.GROUP.value, inherit=inherit, only_inherit=only_inherit
)
return Group.objects.filter(id__in=group_ids)

def _get_role_related_object_ids(self, object_type: str, inherit: bool = True) -> List[int]:
def _get_role_related_object_ids(
self, object_type: str, inherit: bool = True, only_inherit: bool = False
) -> List[int]:
# 分级管理员可以管理子集管理员的所有用户组
if (
self.role.type == RoleType.GRADE_MANAGER.value
and object_type == RoleRelatedObjectType.GROUP.value
and inherit
):
role_ids = RoleRelation.objects.list_sub_id(self.role.id)
role_ids.append(self.role.id)
if not only_inherit:
role_ids.append(self.role.id)
return list(
RoleRelatedObject.objects.filter(role_id__in=role_ids, object_type=object_type).values_list(
"object_id", flat=True
Expand Down

0 comments on commit f40df72

Please sign in to comment.