From 953c864c9800d2e67b83b308b1b51b4a604a6de6 Mon Sep 17 00:00:00 2001 From: yunlongJia Date: Fri, 13 Dec 2024 17:25:44 +0800 Subject: [PATCH 1/5] =?UTF-8?q?feat:=E7=94=B3=E8=AF=B7=E5=8A=A0=E5=85=A5?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E7=BB=84=E6=97=B6=EF=BC=8C=E4=BA=8C=E7=BA=A7?= =?UTF-8?q?=E8=B5=84=E6=BA=90=E6=8B=A5=E6=9C=89=E8=80=85=E7=A6=BB=E8=81=8C?= =?UTF-8?q?=EF=BC=8C=E4=B8=8A=E5=8D=87=E5=88=B0=E4=B8=80=E7=BA=A7=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E5=91=98=E5=AE=A1=E6=89=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- saas/backend/biz/application.py | 6 +++++- saas/backend/service/role.py | 18 ++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/saas/backend/biz/application.py b/saas/backend/biz/application.py index f79d5d771..e8434c217 100644 --- a/saas/backend/biz/application.py +++ b/saas/backend/biz/application.py @@ -161,6 +161,10 @@ def get_grade_manager_members_by_group_id(self, group_id: int) -> str: """获取分级管理员""" return self.svc.get_role_by_group_id(group_id).members + @cachedmethod(timeout=60) # 缓存1分钟 + def get_grade_or_parent_manager_members_by_group_id(self, group_id: int) -> List[str]: + """获取分级管理员,如果为空,获取父级管理员""" + return self.svc.get_role_parent_member_by_group_id(group_id) class ApprovedPassApplicationBiz: """审批通过处理""" @@ -445,7 +449,7 @@ def _get_approval_process_with_node_processor( elif node.processor_type == RoleType.GRADE_MANAGER.value: # 如果是自定义权限, 需要后续流程中填充审批人 if "group_id" in kwargs: - processors = self.approval_processor_biz.get_grade_manager_members_by_group_id( + processors = self.approval_processor_biz.get_grade_or_parent_manager_members_by_group_id( group_id=kwargs["group_id"] ) # NOTE: 由于资源实例审批人节点的逻辑涉及到复杂的拆分, 合并逻辑, 不在这里处理 diff --git a/saas/backend/service/role.py b/saas/backend/service/role.py index 192acea30..06b76f70c 100644 --- a/saas/backend/service/role.py +++ b/saas/backend/service/role.py @@ -656,3 +656,21 @@ def transfer_groups_role(self, group_ids: List[int], role_id: int): RoleRelatedObject.objects.filter( object_type=RoleRelatedObjectType.TEMPLATE.value, object_id__in=template_ids ).update(role_id=role_id) + + def get_role_parent_member_by_group_id(self, group_id: int): + """通过用户组ID查询其对应角色的用户,为空则查询上一级角色对应的用户""" + # 查询用户组的来源角色 + role_related_object = RoleRelatedObject.objects.get( + object_type=RoleRelatedObjectType.GROUP.value, object_id=group_id + ) + # 查询角色 + role = Role.objects.get(id=role_related_object.role_id) + + relation = RoleRelation.objects.filter(role_id=role.id).first() + + # 当前角色管理员不存在并存在上级角色 + if not role.members and relation: + parent_role = Role.objects.get(id=relation.parent_id) + return parent_role.members + + return role.members From cab3ababe09c329e4f70e65ba54f632428dc04eb Mon Sep 17 00:00:00 2001 From: yunlongJia Date: Wed, 18 Dec 2024 10:32:23 +0800 Subject: [PATCH 2/5] =?UTF-8?q?fix:=E8=A7=A3=E5=86=B3flake8=E6=A0=A1?= =?UTF-8?q?=E9=AA=8C=E5=A4=B1=E8=B4=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- saas/backend/biz/application.py | 1 + 1 file changed, 1 insertion(+) diff --git a/saas/backend/biz/application.py b/saas/backend/biz/application.py index e8434c217..fa8435a8f 100644 --- a/saas/backend/biz/application.py +++ b/saas/backend/biz/application.py @@ -166,6 +166,7 @@ def get_grade_or_parent_manager_members_by_group_id(self, group_id: int) -> List """获取分级管理员,如果为空,获取父级管理员""" return self.svc.get_role_parent_member_by_group_id(group_id) + class ApprovedPassApplicationBiz: """审批通过处理""" From 1ee50b0731260b5a15f6b82062660f9464cfecd7 Mon Sep 17 00:00:00 2001 From: yunlongJia Date: Thu, 26 Dec 2024 14:48:21 +0800 Subject: [PATCH 3/5] =?UTF-8?q?update:=E4=BF=AE=E6=94=B9=E4=B8=BAbiz?= =?UTF-8?q?=E5=B1=82=E5=AE=9E=E7=8E=B0=E4=BA=8C=E7=BA=A7=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E5=91=98=E4=B8=8D=E5=AD=98=E5=9C=A8=E4=B8=8A=E5=8D=87=E5=88=B0?= =?UTF-8?q?=E4=B8=80=E7=BA=A7=E7=AE=A1=E7=90=86=E5=91=98=E5=AE=A1=E6=89=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- saas/backend/biz/application.py | 17 +++++++++-------- saas/backend/service/role.py | 18 ------------------ 2 files changed, 9 insertions(+), 26 deletions(-) diff --git a/saas/backend/biz/application.py b/saas/backend/biz/application.py index fa8435a8f..a43d47a0c 100644 --- a/saas/backend/biz/application.py +++ b/saas/backend/biz/application.py @@ -157,14 +157,15 @@ def get_system_manager_members(self, system_id: str) -> str: return Role.objects.get(type=RoleType.SYSTEM_MANAGER.value, code=system_id).members @cachedmethod(timeout=60) # 缓存1分钟 - def get_grade_manager_members_by_group_id(self, group_id: int) -> str: - """获取分级管理员""" - return self.svc.get_role_by_group_id(group_id).members - - @cachedmethod(timeout=60) # 缓存1分钟 - def get_grade_or_parent_manager_members_by_group_id(self, group_id: int) -> List[str]: + def get_grade_manager_members_by_group_id(self, group_id: int, fallback_to_parent_if_empty = True) -> str: """获取分级管理员,如果为空,获取父级管理员""" - return self.svc.get_role_parent_member_by_group_id(group_id) + current_role = self.svc.get_role_by_group_id(group_id) + + if fallback_to_parent_if_empty and not current_role.members: + parent_id = self.svc.get_parent_id(current_role.id) + return self.svc.list_members_by_role_id(parent_id) + + return current_role.members class ApprovedPassApplicationBiz: @@ -450,7 +451,7 @@ def _get_approval_process_with_node_processor( elif node.processor_type == RoleType.GRADE_MANAGER.value: # 如果是自定义权限, 需要后续流程中填充审批人 if "group_id" in kwargs: - processors = self.approval_processor_biz.get_grade_or_parent_manager_members_by_group_id( + processors = self.approval_processor_biz.get_grade_manager_members_by_group_id( group_id=kwargs["group_id"] ) # NOTE: 由于资源实例审批人节点的逻辑涉及到复杂的拆分, 合并逻辑, 不在这里处理 diff --git a/saas/backend/service/role.py b/saas/backend/service/role.py index 06b76f70c..192acea30 100644 --- a/saas/backend/service/role.py +++ b/saas/backend/service/role.py @@ -656,21 +656,3 @@ def transfer_groups_role(self, group_ids: List[int], role_id: int): RoleRelatedObject.objects.filter( object_type=RoleRelatedObjectType.TEMPLATE.value, object_id__in=template_ids ).update(role_id=role_id) - - def get_role_parent_member_by_group_id(self, group_id: int): - """通过用户组ID查询其对应角色的用户,为空则查询上一级角色对应的用户""" - # 查询用户组的来源角色 - role_related_object = RoleRelatedObject.objects.get( - object_type=RoleRelatedObjectType.GROUP.value, object_id=group_id - ) - # 查询角色 - role = Role.objects.get(id=role_related_object.role_id) - - relation = RoleRelation.objects.filter(role_id=role.id).first() - - # 当前角色管理员不存在并存在上级角色 - if not role.members and relation: - parent_role = Role.objects.get(id=relation.parent_id) - return parent_role.members - - return role.members From 26e596893b2a2d05c2363f35976a2318571485f6 Mon Sep 17 00:00:00 2001 From: yunlongJia Date: Thu, 26 Dec 2024 14:55:05 +0800 Subject: [PATCH 4/5] =?UTF-8?q?fix:=E4=BF=AE=E5=A4=8Dflake8=E6=A0=A1?= =?UTF-8?q?=E9=AA=8C=E5=A4=B1=E8=B4=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- saas/backend/biz/application.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/saas/backend/biz/application.py b/saas/backend/biz/application.py index a43d47a0c..7acb46076 100644 --- a/saas/backend/biz/application.py +++ b/saas/backend/biz/application.py @@ -157,7 +157,7 @@ def get_system_manager_members(self, system_id: str) -> str: return Role.objects.get(type=RoleType.SYSTEM_MANAGER.value, code=system_id).members @cachedmethod(timeout=60) # 缓存1分钟 - def get_grade_manager_members_by_group_id(self, group_id: int, fallback_to_parent_if_empty = True) -> str: + def get_grade_manager_members_by_group_id(self, group_id: int, fallback_to_parent_if_empty: bool=True) -> List[str]: """获取分级管理员,如果为空,获取父级管理员""" current_role = self.svc.get_role_by_group_id(group_id) From 8299956b463db80042bf843a54657ba4d400541e Mon Sep 17 00:00:00 2001 From: yunlongJia Date: Thu, 26 Dec 2024 15:13:39 +0800 Subject: [PATCH 5/5] =?UTF-8?q?fix:=E4=BF=AE=E5=A4=8Dflake8=E6=A0=A1?= =?UTF-8?q?=E9=AA=8C=E5=A4=B1=E8=B4=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- saas/backend/biz/application.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/saas/backend/biz/application.py b/saas/backend/biz/application.py index 7acb46076..52a9c06d2 100644 --- a/saas/backend/biz/application.py +++ b/saas/backend/biz/application.py @@ -157,7 +157,9 @@ def get_system_manager_members(self, system_id: str) -> str: return Role.objects.get(type=RoleType.SYSTEM_MANAGER.value, code=system_id).members @cachedmethod(timeout=60) # 缓存1分钟 - def get_grade_manager_members_by_group_id(self, group_id: int, fallback_to_parent_if_empty: bool=True) -> List[str]: + def get_grade_manager_members_by_group_id( + self, group_id: int, fallback_to_parent_if_empty: bool = True + ) -> List[str]: """获取分级管理员,如果为空,获取父级管理员""" current_role = self.svc.get_role_by_group_id(group_id)