Skip to content

Commit ed3ea0b

Browse files
committed
Fixes
1 parent 8029096 commit ed3ea0b

3 files changed

Lines changed: 326 additions & 48 deletions

File tree

server/gql/loaders.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -475,12 +475,13 @@ func NewLoaders(dbf model.Finder, batchSize int, stopTimeBatchSize int) *Loaders
475475
func loaderMiddleware(next http.Handler) http.Handler {
476476
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
477477
// This is per request scoped loaders/cache
478-
// Is this OK to use as a long term cache?
479478
ctx := r.Context()
480479
cfg := model.ForContext(ctx)
481-
loaders := NewLoaders(cfg.Finder, cfg.LoaderBatchSize, cfg.LoaderStopTimeBatchSize)
482-
nextCtx := context.WithValue(ctx, loadersKey, loaders)
483-
r = r.WithContext(nextCtx)
480+
if cfg.Finder != nil {
481+
loaders := NewLoaders(cfg.Finder, cfg.LoaderBatchSize, cfg.LoaderStopTimeBatchSize)
482+
ctx = context.WithValue(ctx, loadersKey, loaders)
483+
}
484+
r = r.WithContext(ctx)
484485
next.ServeHTTP(w, r)
485486
})
486487
}

server/gql/permission_resolver.go

Lines changed: 31 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -151,53 +151,19 @@ func (r *queryResolver) Groups(ctx context.Context) ([]*model.Group, error) {
151151
// Mutation resolvers
152152

153153
func (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

178161
func (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

203169
func (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

224187
func (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

Comments
 (0)