@@ -48,10 +48,14 @@ export const UserRoleCell: FC<UserRoleCellProps> = ({
48
48
oidcRoleSyncEnabled,
49
49
onEditRoles,
50
50
} ) => {
51
- const mergedRoles = getMergedRoles ( inheritedRoles ?? [ ] , roles ) ;
51
+ const mergedRoles = getTieredRoles ( inheritedRoles ?? [ ] , roles ) ;
52
52
const [ mainDisplayRole = fallbackRole , ...extraRoles ] =
53
53
sortRolesByAccessLevel ( mergedRoles ?? [ ] ) ;
54
- const hasOwnerRole = mainDisplayRole . name === "owner" ;
54
+ const hasOwnerRole =
55
+ mainDisplayRole . name === "owner" ||
56
+ mainDisplayRole . name === "organization-admin" ;
57
+
58
+ const displayName = mainDisplayRole . display_name || mainDisplayRole . name ;
55
59
56
60
return (
57
61
< TableCell >
@@ -74,13 +78,21 @@ export const UserRoleCell: FC<UserRoleCellProps> = ({
74
78
/>
75
79
) }
76
80
77
- < Pill css = { hasOwnerRole ? styles . ownerRoleBadge : styles . roleBadge } >
81
+ < Pill
82
+ css = {
83
+ hasOwnerRole
84
+ ? styles . ownerRoleBadge
85
+ : mainDisplayRole . global
86
+ ? styles . globalRoleBadge
87
+ : styles . roleBadge
88
+ }
89
+ >
78
90
{ mainDisplayRole . global ? (
79
91
< Tooltip title = "This user has this role for all organizations." >
80
- < span > { mainDisplayRole . display_name } *</ span >
92
+ < span > { displayName } *</ span >
81
93
</ Tooltip >
82
94
) : (
83
- mainDisplayRole . display_name
95
+ displayName
84
96
) }
85
97
</ Pill >
86
98
@@ -91,7 +103,7 @@ export const UserRoleCell: FC<UserRoleCellProps> = ({
91
103
} ;
92
104
93
105
type OverflowRolePillProps = {
94
- roles : readonly SlimRole [ ] ;
106
+ roles : readonly TieredSlimRole [ ] ;
95
107
} ;
96
108
97
109
const OverflowRolePill : FC < OverflowRolePillProps > = ( { roles } ) => {
@@ -136,12 +148,15 @@ const OverflowRolePill: FC<OverflowRolePillProps> = ({ roles }) => {
136
148
{ roles . map ( ( role ) => (
137
149
< Pill
138
150
key = { role . name }
139
- css = { {
140
- backgroundColor : theme . palette . background . paper ,
141
- borderColor : theme . palette . divider ,
142
- } }
151
+ css = { role . global ? styles . globalRoleBadge : styles . roleBadge }
143
152
>
144
- { role . display_name || role . name }
153
+ { role . global ? (
154
+ < Tooltip title = "This user has this role for all organizations." >
155
+ < span > { role . display_name || role . name } *</ span >
156
+ </ Tooltip >
157
+ ) : (
158
+ role . display_name || role . name
159
+ ) }
145
160
</ Pill >
146
161
) ) }
147
162
</ PopoverContent >
@@ -150,6 +165,10 @@ const OverflowRolePill: FC<OverflowRolePillProps> = ({ roles }) => {
150
165
} ;
151
166
152
167
const styles = {
168
+ globalRoleBadge : ( theme ) => ( {
169
+ backgroundColor : theme . roles . success . background ,
170
+ borderColor : theme . roles . success . outline ,
171
+ } ) ,
153
172
ownerRoleBadge : ( theme ) => ( {
154
173
backgroundColor : theme . roles . info . background ,
155
174
borderColor : theme . roles . info . outline ,
@@ -160,16 +179,20 @@ const styles = {
160
179
} ) ,
161
180
} satisfies Record < string , Interpolation < Theme > > ;
162
181
163
- const fallbackRole : MergedSlimRole = {
182
+ const fallbackRole : TieredSlimRole = {
164
183
name : "member" ,
165
184
display_name : "Member" ,
166
185
} as const ;
167
186
168
187
const roleNamesByAccessLevel : readonly string [ ] = [
169
188
"owner" ,
189
+ "organization-admin" ,
170
190
"user-admin" ,
191
+ "organization-user-admin" ,
171
192
"template-admin" ,
193
+ "organization-template-admin" ,
172
194
"auditor" ,
195
+ "organization-auditor" ,
173
196
] ;
174
197
175
198
function sortRolesByAccessLevel < T extends SlimRole > (
@@ -195,15 +218,15 @@ function getSelectedRoleNames(roles: readonly SlimRole[]) {
195
218
return roleNameSet ;
196
219
}
197
220
198
- interface MergedSlimRole extends SlimRole {
221
+ interface TieredSlimRole extends SlimRole {
199
222
global ?: boolean ;
200
223
}
201
224
202
- function getMergedRoles (
225
+ function getTieredRoles (
203
226
globalRoles : readonly SlimRole [ ] ,
204
227
localRoles : readonly SlimRole [ ] ,
205
228
) {
206
- const roles = new Map < string , MergedSlimRole > ( ) ;
229
+ const roles = new Map < string , TieredSlimRole > ( ) ;
207
230
208
231
for ( const role of globalRoles ) {
209
232
roles . set ( role . name , {
0 commit comments