diff --git a/src/spaceone/identity/manager/user_manager.py b/src/spaceone/identity/manager/user_manager.py index affcc215..645ff670 100644 --- a/src/spaceone/identity/manager/user_manager.py +++ b/src/spaceone/identity/manager/user_manager.py @@ -11,7 +11,8 @@ from spaceone.identity.manager.project_manager import ProjectManager from spaceone.identity.manager.role_binding_manager import RoleBindingManager from spaceone.identity.manager.user_group_manager import UserGroupManager -from spaceone.identity.manager.workspace_group_manager import WorkspaceGroupManager +from spaceone.identity.manager.workspace_group_manager import \ + WorkspaceGroupManager from spaceone.identity.model.user.database import User _LOGGER = logging.getLogger(__name__) @@ -127,16 +128,24 @@ def delete_user_by_vo(user_vo: User) -> None: users.remove(user_vo.user_id) project_mgr.update_project_by_vo({"users": users}, project_vo=project_vo) - # TODO: Delete Workspace Group + # Delete workspace groups workspace_group_vos = workspace_group_mgr.filter_workspace_groups( - users=user_vo.user_id, domain_id=user_vo.domain_id + users__user_id=user_vo.user_id, domain_id=user_vo.domain_id ) + for workspace_group_vo in workspace_group_vos: - users = workspace_group_vo.users - users.remove(user_vo.user_id) - workspace_group_mgr.update_workspace_group_by_vo( - {"users": users}, workspace_group_vo=workspace_group_vo - ) + workspace_group_dict = workspace_group_vo.to_mongo().to_dict() + users = workspace_group_dict.get("users", []) + + if users: + updated_users = [ + user for user in users if user.get("user_id") != user_vo.user_id + ] + + if len(updated_users) != len(users): + workspace_group_mgr.update_workspace_group_by_vo( + {"users": updated_users}, workspace_group_vo=workspace_group_vo + ) user_vo.delete() diff --git a/src/spaceone/identity/service/user_profile_service.py b/src/spaceone/identity/service/user_profile_service.py index 63a752c6..61f4f9f2 100644 --- a/src/spaceone/identity/service/user_profile_service.py +++ b/src/spaceone/identity/service/user_profile_service.py @@ -16,23 +16,21 @@ from spaceone.identity.manager.mfa_manager.base import MFAManager from spaceone.identity.manager.role_binding_manager import RoleBindingManager from spaceone.identity.manager.role_manager import RoleManager -from spaceone.identity.manager.token_manager.local_token_manager import ( - LocalTokenManager, -) +from spaceone.identity.manager.token_manager.local_token_manager import \ + LocalTokenManager from spaceone.identity.manager.user_manager import UserManager -from spaceone.identity.manager.workspace_group_manager import WorkspaceGroupManager +from spaceone.identity.manager.workspace_group_manager import \ + WorkspaceGroupManager from spaceone.identity.manager.workspace_manager import WorkspaceManager from spaceone.identity.model.user.database import User from spaceone.identity.model.user.response import * from spaceone.identity.model.user_profile.request import * -from spaceone.identity.model.user_profile.request import ( - UserProfileGetWorkspaceGroupsRequest, -) +from spaceone.identity.model.user_profile.request import \ + UserProfileGetWorkspaceGroupsRequest from spaceone.identity.model.user_profile.response import ( - MyWorkspaceGroupsResponse, - MyWorkspacesResponse, -) -from spaceone.identity.service.workspace_group_service import WorkspaceGroupService + MyWorkspaceGroupsResponse, MyWorkspacesResponse) +from spaceone.identity.service.workspace_group_service import \ + WorkspaceGroupService _LOGGER = logging.getLogger(__name__) @@ -350,41 +348,48 @@ def get_workspaces( MyWorkspaceResponse: """ + workspace_group_id = params.workspace_group_id + user_id = params.user_id + domain_id = params.domain_id + role_mgr = RoleManager() rb_mgr = RoleBindingManager() workspace_mgr = WorkspaceManager() allow_all = False - user_vo = self.user_mgr.get_user(params.user_id, params.domain_id) + user_vo = self.user_mgr.get_user(user_id, domain_id) if user_vo.role_type == "DOMAIN_ADMIN": allow_all = True conditions = { - "user_id": params.user_id, - "domain_id": params.domain_id, + "user_id": user_id, + "domain_id": domain_id, "role_type": ["WORKSPACE_OWNER", "WORKSPACE_MEMBER"], } - if params.workspace_group_id: - conditions["workspace_group_id"] = params.workspace_group_id + if workspace_group_id: + conditions["workspace_group_id"] = workspace_group_id rb_vos = rb_mgr.filter_role_bindings(**conditions) + workspace_filter_conditions = {"domain_id": domain_id, "state": "ENABLED"} if allow_all: + if workspace_group_id: + workspace_filter_conditions["workspace_group_id"] = workspace_group_id + workspace_vos = workspace_mgr.filter_workspaces( - domain_id=params.domain_id, state="ENABLED" + **workspace_filter_conditions ) else: workspace_ids = list(set([rb.workspace_id for rb in rb_vos])) + workspace_filter_conditions["workspace_id"] = workspace_ids workspace_vos = workspace_mgr.filter_workspaces( - workspace_id=workspace_ids, - domain_id=params.domain_id, - state="ENABLED", + **workspace_filter_conditions ) role_vos = role_mgr.filter_roles( - domain_id=params.domain_id, + domain_id=domain_id, role_type=["WORKSPACE_OWNER", "WORKSPACE_MEMBER"], )