Skip to content

Commit

Permalink
fix: fix bugs in WorkspaceUser.stat API
Browse files Browse the repository at this point in the history
  • Loading branch information
whdalsrnt committed Dec 31, 2023
1 parent 84a507e commit 47949ed
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 36 deletions.
2 changes: 1 addition & 1 deletion src/spaceone/identity/interface/grpc/workspace_user.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,5 +34,5 @@ def list(self, request, context):
def stat(self, request, context):
params, metadata = self.parse_request(request, context)
workspace_user_svc = WorkspaceUserService(metadata)
response: dict = workspace_user_svc.list(params)
response: dict = workspace_user_svc.stat(params)
return self.dict_to_message(response)
62 changes: 29 additions & 33 deletions src/spaceone/identity/manager/workspace_user_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,24 +40,9 @@ def create_workspace_user(self, params: dict) -> User:

return user_vo

def get_workspace_user(
self, user_id: str, workspace_id: str, domain_id: str
) -> dict:
user_ids, user_rb_map = self._get_role_binding_map_in_workspace(
workspace_id, domain_id
)
if user_id not in user_ids:
raise ERROR_NOT_FOUND(key="user_id", value=user_id)

user_vo = self.user_mgr.get_user(user_id, domain_id)
user_info = user_vo.to_dict()
user_info["role_binding_info"] = user_rb_map[user_id]

return user_info

def check_workspace_users(
self, users: List[str], workspace_id: str, domain_id: str
) -> bool:
) -> None:
rb_vos = self.rb_mgr.filter_role_bindings(
user_id=users,
workspace_id=[workspace_id, "*"],
Expand All @@ -73,17 +58,29 @@ def check_workspace_users(
user_id=user_id, workspace_id=workspace_id
)

def get_workspace_user(
self, user_id: str, workspace_id: str, domain_id: str
) -> dict:
user_ids, user_rb_map = self._get_role_binding_map_in_workspace(
workspace_id, domain_id
)
if user_id not in user_ids:
raise ERROR_NOT_FOUND(key="user_id", value=user_id)

user_vo = self.user_mgr.get_user(user_id, domain_id)
user_info = user_vo.to_dict()
user_info["role_binding_info"] = user_rb_map[user_id]

return user_info

def list_workspace_users(
self, query: dict, domain_id: str, workspace_id: str = None
self, query: dict, domain_id: str, workspace_id: str
) -> Tuple[list, int]:
user_rb_map = None

if workspace_id:
user_ids, user_rb_map = self._get_role_binding_map_in_workspace(
workspace_id, domain_id
)
query["filter"] = query.get("filter", [])
query["filter"].append({"k": "user_id", "v": user_ids, "o": "in"})
user_ids, user_rb_map = self._get_role_binding_map_in_workspace(
workspace_id, domain_id
)
query["filter"] = query.get("filter", [])
query["filter"].append({"k": "user_id", "v": user_ids, "o": "in"})

user_vos, total_count = self.user_mgr.list_users(query)

Expand All @@ -99,16 +96,15 @@ def list_workspace_users(
return users_info, total_count

def stat_workspace_users(
self, query: dict, domain_id: str, workspace_id: str = None
self, query: dict, domain_id: str, workspace_id: str
) -> dict:
if workspace_id:
user_ids, user_rb_map = self._get_role_binding_map_in_workspace(
workspace_id, domain_id
)
query["filter"] = query.get("filter", [])
query["filter"].append({"k": "user_id", "v": user_ids, "o": "in"})
user_ids, user_rb_map = self._get_role_binding_map_in_workspace(
workspace_id, domain_id
)
query["filter"] = query.get("filter", [])
query["filter"].append({"k": "user_id", "v": user_ids, "o": "in"})

return self.user_mgr.stat(**query)
return self.user_mgr.stat_users(query)

def _get_role_binding_map_in_workspace(
self, workspace_id: str, domain_id: str
Expand Down
7 changes: 5 additions & 2 deletions src/spaceone/identity/service/workspace_user_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,7 @@ def find(
)
workspace_user_ids = list(set([rb.user_id for rb in rb_vos]))

# default query
query = {
"filter": [
{"k": "domain_id", "v": params.domain_id, "o": "eq"},
Expand All @@ -92,12 +93,14 @@ def find(
"only": ["user_id", "name", "state"],
}

# append keyword filter
if params.keyword:
query["filter_or"] = [
{"k": "user_id", "v": params.keyword, "o": "contain"},
{"k": "name", "v": params.keyword, "o": "contain"},
]

# append state filter
if params.state:
query["filter"].append({"k": "state", "v": params.state, "o": "eq"})

Expand Down Expand Up @@ -169,9 +172,9 @@ def list(

@transaction(
permission="identity:WorkspaceUser.read",
role_types=["WORKSPACE_OWNER", "WORKSPACE_MEMBER"],
role_types=["DOMAIN", "WORKSPACE_OWNER", "WORKSPACE_MEMBER"],
)
@append_query_filter(["domain_id", "workspace_id"])
@append_query_filter(["domain_id"])
@convert_model
def stat(self, params: WorkspaceUserStatQueryRequest) -> dict:
"""stat users in workspace
Expand Down

0 comments on commit 47949ed

Please sign in to comment.