@@ -43,6 +43,14 @@ func dataSourceUser() *schema.Resource {
4343				Computed :    true ,
4444				Description : "The user phone." ,
4545			},
46+ 			"roles" : {
47+ 				Type :     schema .TypeSet ,
48+ 				Computed : true ,
49+ 				Elem : & schema.Schema {
50+ 					Type : schema .TypeString ,
51+ 				},
52+ 				Description : "The user's roles in the workspace level" ,
53+ 			},
4654			"type" : {
4755				Type :        schema .TypeString ,
4856				Computed :    true ,
@@ -88,10 +96,29 @@ func dataSourceUserRead(ctx context.Context, d *schema.ResourceData, m interface
8896
8997	d .SetId (user .Name )
9098
91- 	return  setUser (d , user )
99+ 	return  setUser (ctx , c , d , user )
100+ }
101+ 
102+ func  getUserRoles (iamPolicy  * v1pb.IamPolicy , email  string ) []string  {
103+ 	userBinding  :=  fmt .Sprintf ("user:%s" , email )
104+ 	roles  :=  []string {}
105+ 
106+ 	for  _ , binding  :=  range  iamPolicy .Bindings  {
107+ 		for  _ , member  :=  range  binding .Members  {
108+ 			if  member  ==  userBinding  {
109+ 				roles  =  append (roles , binding .Role )
110+ 			}
111+ 		}
112+ 	}
113+ 	return  roles 
92114}
93115
94- func  setUser (d  * schema.ResourceData , user  * v1pb.User ) diag.Diagnostics  {
116+ func  setUser (ctx  context.Context , client  api.Client , d  * schema.ResourceData , user  * v1pb.User ) diag.Diagnostics  {
117+ 	workspaceIAM , err  :=  client .GetWorkspaceIAMPolicy (ctx )
118+ 	if  err  !=  nil  {
119+ 		return  diag .Errorf ("cannot get workspace IAM with error: %s" , err .Error ())
120+ 	}
121+ 
95122	if  err  :=  d .Set ("title" , user .Title ); err  !=  nil  {
96123		return  diag .Errorf ("cannot set title for user: %s" , err .Error ())
97124	}
@@ -121,6 +148,9 @@ func setUser(d *schema.ResourceData, user *v1pb.User) diag.Diagnostics {
121148			return  diag .Errorf ("cannot set source for user: %s" , err .Error ())
122149		}
123150	}
151+ 	if  err  :=  d .Set ("roles" , getUserRoles (workspaceIAM , user .Email )); err  !=  nil  {
152+ 		return  diag .Errorf ("cannot set roles for user: %s" , err .Error ())
153+ 	}
124154
125155	return  nil 
126156}
0 commit comments