1+ # Create users and groups
2+ resource "bytebase_user" "workspace_admin" {
3+ 4+ title = " Workspace Admin"
5+ type = " USER"
6+ }
7+
8+ resource "bytebase_user" "tf_service_account" {
9+ 10+ title = " Terraform Service Account"
11+ type = " SERVICE_ACCOUNT"
12+ }
13+
14+ resource "bytebase_user" "workspace_dba1" {
15+ 16+ title = " Database Administrator 1"
17+ type = " USER"
18+ }
19+
20+ resource "bytebase_user" "workspace_dba2" {
21+ 22+ title = " Database Administrator 2"
23+ type = " USER"
24+ }
25+
26+ resource "bytebase_user" "dev1" {
27+ 28+ title = " Developer 1"
29+ type = " USER"
30+ }
31+
32+ resource "bytebase_user" "dev2" {
33+ 34+ title = " Developer 2"
35+ type = " USER"
36+ }
37+
38+ resource "bytebase_user" "dev3" {
39+ 40+ title = " Developer 3"
41+ type = " USER"
42+ }
43+
44+ resource "bytebase_user" "qa1" {
45+ 46+ title = " QA Tester 1"
47+ type = " USER"
48+ }
49+
50+ resource "bytebase_user" "qa2" {
51+ 52+ title = " QA Tester 2"
53+ type = " USER"
54+ }
55+
56+ # Create groups
57+ resource "bytebase_group" "developers" {
58+ 59+ title = " Developer Team"
60+ description = " Group for all developers"
61+
62+ members {
63+ member = " users/${ bytebase_user . dev1 . email } "
64+ role = " OWNER"
65+ }
66+
67+ members {
68+ member = " users/${ bytebase_user . dev2 . email } "
69+ role = " MEMBER"
70+ }
71+
72+ members {
73+ member = " users/${ bytebase_user . dev3 . email } "
74+ role = " MEMBER"
75+ }
76+ }
77+
78+ resource "bytebase_group" "qa" {
79+ 80+ title = " QA Team"
81+ description = " Group for all QA testers"
82+
83+ members {
84+ member = " users/${ bytebase_user . qa1 . email } "
85+ role = " OWNER"
86+ }
87+
88+ members {
89+ member = " users/${ bytebase_user . qa2 . email } "
90+ role = " MEMBER"
91+ }
92+ }
93+
94+ resource "bytebase_iam_policy" "workspace_iam" {
95+ depends_on = [
96+ bytebase_user . workspace_admin ,
97+ bytebase_user . tf_service_account ,
98+ bytebase_user . workspace_dba1 ,
99+ bytebase_user . workspace_dba2 ,
100+ bytebase_group . qa
101+ ]
102+
103+ parent = " workspaces/-"
104+
105+ iam_policy {
106+
107+ binding {
108+ role = " roles/workspaceAdmin"
109+ members = [
110+ format (" user:%s" , bytebase_user. workspace_admin . email ),
111+ format (" user:%s" , bytebase_user. tf_service_account . email ),
112+ ]
113+ }
114+
115+ binding {
116+ role = " roles/workspaceDBA"
117+ members = [
118+ format (" user:%s" , bytebase_user. workspace_dba1 . email ),
119+ format (" user:%s" , bytebase_user. workspace_dba2 . email )
120+ ]
121+ }
122+
123+ binding {
124+ role = " roles/workspaceMember"
125+ members = [
126+ format (" user:%s" , bytebase_user. dev1 . email ),
127+ format (" user:%s" , bytebase_user. dev2 . email ),
128+ format (" user:%s" , bytebase_user. dev3 . email )
129+ ]
130+ }
131+
132+ binding {
133+ role = " roles/projectViewer"
134+ members = [
135+ format (" group:%s" , bytebase_group. qa . email ),
136+ ]
137+ }
138+ }
139+ }
140+
141+ resource "bytebase_iam_policy" "project_iam" {
142+ depends_on = [
143+ bytebase_group . developers ,
144+ bytebase_user . workspace_dba1 ,
145+ bytebase_user . workspace_dba2
146+ ]
147+
148+ parent = bytebase_project. project-two . name
149+
150+ iam_policy {
151+
152+ binding {
153+ role = " roles/projectOwner"
154+ members = [
155+ format (" user:%s" , bytebase_user. workspace_dba1 . email ),
156+ format (" user:%s" , bytebase_user. workspace_dba2 . email )
157+ ]
158+ }
159+
160+ binding {
161+ role = " roles/projectDeveloper"
162+ members = [
163+ " allUsers" ,
164+ format (" group:%s" , bytebase_group. developers . email )
165+ ]
166+ }
167+
168+ binding {
169+ role = " roles/sqlEditorUser"
170+ members = [
171+ format (" group:%s" , bytebase_group. developers . email )
172+ ]
173+ condition {
174+ database = " instances/prod-sample-instance/databases/hr_prod"
175+ schema = " public"
176+ tables = [" employee" ," department" ]
177+ expire_timestamp = " 2027-07-10T16:17:49Z"
178+ }
179+ }
180+
181+ }
182+ }
0 commit comments