@@ -106,12 +106,24 @@ func (api *API) putWorkflowGroupHandler() service.Handler {
106
106
return sdk .WrapError (sdk .ErrNotFound , "no permission found for group %q on workflow" , gp .Group .Name )
107
107
}
108
108
109
- g , err := group .LoadByName (ctx , api .mustDB (), gp .Group .Name , group .LoadOptions .WithOrganization )
109
+ g , err := group .LoadByName (ctx , api .mustDB (), gp .Group .Name , group .LoadOptions .WithOrganization , group . LoadOptions . WithMembers )
110
110
if err != nil {
111
111
return sdk .WrapError (err , "cannot load group with name %q" , gp .Group .Name )
112
112
}
113
113
gp .Group = * g
114
114
115
+ if ! isGroupAdmin (ctx , g ) && gp .Permission > oldGp .Permission {
116
+ if isAdmin (ctx ) {
117
+ trackSudo (ctx , w )
118
+ } else {
119
+ return sdk .WithStack (sdk .ErrInvalidGroupAdmin )
120
+ }
121
+ }
122
+
123
+ if group .IsDefaultGroupID (g .ID ) && gp .Permission > sdk .PermissionRead {
124
+ return sdk .NewErrorFrom (sdk .ErrDefaultGroupPermission , "only read permission is allowed to default group" )
125
+ }
126
+
115
127
tx , err := api .mustDB ().Begin ()
116
128
if err != nil {
117
129
return sdk .WrapError (err , "cannot start transaction" )
@@ -164,12 +176,24 @@ func (api *API) postWorkflowGroupHandler() service.Handler {
164
176
}
165
177
}
166
178
167
- g , err := group .LoadByName (ctx , api .mustDB (), gp .Group .Name , group .LoadOptions .WithOrganization )
179
+ g , err := group .LoadByName (ctx , api .mustDB (), gp .Group .Name , group .LoadOptions .WithOrganization , group . LoadOptions . WithMembers )
168
180
if err != nil {
169
181
return sdk .WrapError (err , "cannot load group with name %q" , gp .Group .Name )
170
182
}
171
183
gp .Group = * g
172
184
185
+ if ! isGroupAdmin (ctx , g ) && gp .Permission > sdk .PermissionRead {
186
+ if isAdmin (ctx ) {
187
+ trackSudo (ctx , w )
188
+ } else {
189
+ return sdk .WithStack (sdk .ErrInvalidGroupAdmin )
190
+ }
191
+ }
192
+
193
+ if group .IsDefaultGroupID (g .ID ) && gp .Permission > sdk .PermissionRead {
194
+ return sdk .NewErrorFrom (sdk .ErrDefaultGroupPermission , "only read permission is allowed to default group" )
195
+ }
196
+
173
197
tx , err := api .mustDB ().Begin ()
174
198
if err != nil {
175
199
return sdk .WrapError (err , "cannot start transaction" )
0 commit comments