@@ -151,53 +151,19 @@ func (r *queryResolver) Groups(ctx context.Context) ([]*model.Group, error) {
151151// Mutation resolvers
152152
153153func (r * mutationResolver ) PermissionAdd (ctx context.Context , typeArg string , id int , input model.PermissionInput ) (bool , error ) {
154- pm , err := getPermissionManager (ctx )
155- if err != nil {
156- return false , err
157- }
158- objType , err := authz .ObjectTypeString (typeArg )
159- if err != nil {
160- return false , err
161- }
162- subjectType , err := authz .ObjectTypeString (input .SubjectType )
154+ pm , ref , subject , rel , err := parsePermissionArgs (ctx , typeArg , id , input )
163155 if err != nil {
164156 return false , err
165157 }
166- rel , err := authz .RelationString (input .Relation )
167- if err != nil {
168- return false , err
169- }
170- ref := authz.ObjectRef {Type : objType , ID : int64 (id )}
171- subject := authz .NewEntityKey (subjectType , input .SubjectID )
172- if err := pm .AddPermission (ctx , ref , subject , rel ); err != nil {
173- return false , err
174- }
175- return true , nil
158+ return true , pm .AddPermission (ctx , ref , subject , rel )
176159}
177160
178161func (r * mutationResolver ) PermissionRemove (ctx context.Context , typeArg string , id int , input model.PermissionInput ) (bool , error ) {
179- pm , err := getPermissionManager (ctx )
162+ pm , ref , subject , rel , err := parsePermissionArgs (ctx , typeArg , id , input )
180163 if err != nil {
181164 return false , err
182165 }
183- objType , err := authz .ObjectTypeString (typeArg )
184- if err != nil {
185- return false , err
186- }
187- subjectType , err := authz .ObjectTypeString (input .SubjectType )
188- if err != nil {
189- return false , err
190- }
191- rel , err := authz .RelationString (input .Relation )
192- if err != nil {
193- return false , err
194- }
195- ref := authz.ObjectRef {Type : objType , ID : int64 (id )}
196- subject := authz .NewEntityKey (subjectType , input .SubjectID )
197- if err := pm .RemovePermission (ctx , ref , subject , rel ); err != nil {
198- return false , err
199- }
200- return true , nil
166+ return true , pm .RemovePermission (ctx , ref , subject , rel )
201167}
202168
203169func (r * mutationResolver ) PermissionSetParent (ctx context.Context , typeArg string , id int , input model.SetParentInput ) (bool , error ) {
@@ -215,10 +181,7 @@ func (r *mutationResolver) PermissionSetParent(ctx context.Context, typeArg stri
215181 }
216182 child := authz.ObjectRef {Type : childType , ID : int64 (id )}
217183 parent := authz.ObjectRef {Type : parentType , ID : int64 (input .ParentID )}
218- if err := pm .SetParent (ctx , child , parent ); err != nil {
219- return false , err
220- }
221- return true , nil
184+ return true , pm .SetParent (ctx , child , parent )
222185}
223186
224187func (r * mutationResolver ) TenantSave (ctx context.Context , id int , input model.TenantInput ) (* model.Tenant , error ) {
@@ -271,7 +234,7 @@ func getPermissionManager(ctx context.Context) (authz.PermissionManager, error)
271234 if cfg .PermissionManager != nil {
272235 return cfg .PermissionManager , nil
273236 }
274- return nil , errors . New ( "permission management not configured" )
237+ return nil , nil
275238}
276239
277240// getPermissionManagerConcrete returns the azchecker.Checker for admin-specific
@@ -294,9 +257,33 @@ type concretePermissionManager interface {
294257 GroupSave (ctx context.Context , req * authz.GroupSaveRequest ) (* authz.GroupSaveResponse , error )
295258}
296259
297- func resolvePermissions (ctx context.Context , objType authz.ObjectType , id int64 ) (* model.Permissions , error ) {
260+ // parsePermissionArgs validates and converts the string arguments for
261+ // permission add/remove mutations into typed authz values.
262+ func parsePermissionArgs (ctx context.Context , typeArg string , id int , input model.PermissionInput ) (authz.PermissionManager , authz.ObjectRef , authz.EntityKey , authz.Relation , error ) {
298263 pm , err := getPermissionManager (ctx )
264+ if pm == nil || err != nil {
265+ return nil , authz.ObjectRef {}, authz.EntityKey {}, 0 , errors .New ("permission management not configured" )
266+ }
267+ objType , err := authz .ObjectTypeString (typeArg )
299268 if err != nil {
269+ return nil , authz.ObjectRef {}, authz.EntityKey {}, 0 , err
270+ }
271+ subjectType , err := authz .ObjectTypeString (input .SubjectType )
272+ if err != nil {
273+ return nil , authz.ObjectRef {}, authz.EntityKey {}, 0 , err
274+ }
275+ rel , err := authz .RelationString (input .Relation )
276+ if err != nil {
277+ return nil , authz.ObjectRef {}, authz.EntityKey {}, 0 , err
278+ }
279+ ref := authz.ObjectRef {Type : objType , ID : int64 (id )}
280+ subject := authz .NewEntityKey (subjectType , input .SubjectID )
281+ return pm , ref , subject , rel , nil
282+ }
283+
284+ func resolvePermissions (ctx context.Context , objType authz.ObjectType , id int64 ) (* model.Permissions , error ) {
285+ pm , err := getPermissionManager (ctx )
286+ if pm == nil || err != nil {
300287 return nil , err
301288 }
302289 ref := authz.ObjectRef {Type : objType , ID : id }
0 commit comments