Skip to content

Commit 715521f

Browse files
authored
Merge pull request #438 from ImMin5/master
Fix update service_account_mgr_id error
2 parents db95d25 + d4d21e0 commit 715521f

File tree

2 files changed

+35
-14
lines changed

2 files changed

+35
-14
lines changed

src/spaceone/identity/model/service_account/database.py

+1
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ class ServiceAccount(MongoModel):
3838
"tags",
3939
"is_managed",
4040
"cost_info",
41+
"service_account_mgr_id",
4142
"secret_schema_id",
4243
"secret_id",
4344
"trusted_account_id",

src/spaceone/identity/service/service_account_service.py

+34-14
Original file line numberDiff line numberDiff line change
@@ -213,23 +213,23 @@ def update(
213213
)
214214

215215
# check service_account_mgr_id is valid in changed project
216-
if (
217-
params.project_id
218-
and service_account_vo.service_account_mgr_id
219-
and service_account_vo.project_id != params.project_id
220-
):
216+
if params.service_account_mgr_id:
217+
self._check_service_account_mgr_exist(
218+
params.service_account_mgr_id, params.domain_id, params.workspace_id
219+
)
220+
221221
project_vo = self.project_mgr.get_project(
222-
project_id=params.project_id,
223-
domain_id=params.domain_id,
224-
workspace_id=params.workspace_id,
225-
user_projects=params.user_projects,
222+
service_account_vo.project_id,
223+
params.domain_id,
224+
params.workspace_id,
225+
params.user_projects,
226226
)
227227

228-
if (
229-
project_vo.project_type == "PRIVATE"
230-
and service_account_vo.service_account_mgr_id not in project_vo.users
231-
):
232-
params.service_account_mgr_id = None
228+
if project_vo.project_type == "PRIVATE":
229+
project_users = project_vo.users or []
230+
users = list(set(project_users + [params.service_account_mgr_id]))
231+
add_member_params = {"users": users}
232+
self.project_mgr.update_project_by_vo(add_member_params, project_vo)
233233

234234
# change secret's project_id
235235
if (
@@ -627,3 +627,23 @@ def _create_service_account_app_client_secret(
627627
@staticmethod
628628
def _get_expired_at() -> str:
629629
return (datetime.utcnow() + timedelta(days=365)).strftime("%Y-%m-%d %H:%M:%S")
630+
631+
def _check_service_account_mgr_exist(
632+
self,
633+
service_account_mgr_id: str,
634+
domain_id: str,
635+
workspace_id: str,
636+
) -> None:
637+
638+
# check user_id is valid
639+
self.user_mgr.get_user(user_id=service_account_mgr_id, domain_id=domain_id)
640+
641+
rb_vos = self.rb_mgr.filter_role_bindings(
642+
user_id=service_account_mgr_id,
643+
workspace_id=workspace_id,
644+
domain_id=domain_id,
645+
)
646+
if rb_vos.count() == 0:
647+
raise ERROR_NOT_FOUND(
648+
key="service_account_mgr_id", value=service_account_mgr_id
649+
)

0 commit comments

Comments
 (0)