@@ -213,23 +213,23 @@ def update(
213
213
)
214
214
215
215
# 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
+
221
221
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 ,
226
226
)
227
227
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 )
233
233
234
234
# change secret's project_id
235
235
if (
@@ -627,3 +627,23 @@ def _create_service_account_app_client_secret(
627
627
@staticmethod
628
628
def _get_expired_at () -> str :
629
629
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