24
24
from spaceone .identity .manager .role_manager import RoleManager
25
25
from spaceone .identity .manager .system_manager import SystemManager
26
26
from spaceone .identity .manager .token_manager .base import TokenManager
27
+ from spaceone .identity .manager .user_group_manager import UserGroupManager
27
28
from spaceone .identity .manager .user_manager import UserManager
28
29
from spaceone .identity .manager .workspace_manager import WorkspaceManager
29
30
from spaceone .identity .model .app .database import App
@@ -44,6 +45,7 @@ def __init__(self, *args, **kwargs):
44
45
self .domain_mgr = DomainManager ()
45
46
self .domain_secret_mgr = DomainSecretManager ()
46
47
self .user_mgr = UserManager ()
48
+ self .user_group_mgr = UserGroupManager ()
47
49
self .app_mgr = AppManager ()
48
50
self .rb_mgr = RoleBindingManager ()
49
51
self .role_mgr = RoleManager ()
@@ -254,6 +256,14 @@ def grant(self, params: TokenGrantRequest) -> Union[GrantTokenResponse, dict]:
254
256
else :
255
257
user_projects = None
256
258
259
+ # get user groups in workspace
260
+ if params .scope == "WORKSPACE" :
261
+ user_groups = self ._get_user_groups_in_workspace (
262
+ domain_id , params .workspace_id , user_vo .user_id
263
+ )
264
+ else :
265
+ user_groups = None
266
+
257
267
token_info = token_mgr .issue_token (
258
268
private_jwk ,
259
269
refresh_private_jwk ,
@@ -262,6 +272,7 @@ def grant(self, params: TokenGrantRequest) -> Union[GrantTokenResponse, dict]:
262
272
workspace_id = params .workspace_id ,
263
273
permissions = permissions ,
264
274
projects = user_projects ,
275
+ user_groups = user_groups ,
265
276
app_id = app_id , # todo : remove
266
277
)
267
278
@@ -392,6 +403,16 @@ def _get_user_projects_in_project_group(
392
403
user_projects = list (set (user_projects ))
393
404
return user_projects
394
405
406
+ def _get_user_groups_in_workspace (
407
+ self , domain_id : str , workspace_id : str , user_id : str
408
+ ) -> list :
409
+ user_group_vos = self .user_group_mgr .filter_user_groups (
410
+ domain_id = domain_id , workspace_id = workspace_id , users = [user_id ]
411
+ )
412
+ user_groups = [user_group_vo .user_group_id for user_group_vo in user_group_vos ]
413
+
414
+ return user_groups
415
+
395
416
def _get_user_projects (
396
417
self , user_id : str , workspace_id : str , domain_id : str
397
418
) -> List [str ]:
0 commit comments