60 lines
1.1 KiB
Go
60 lines
1.1 KiB
Go
|
package graph
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
|
||
|
"forge.cadoles.com/Cadoles/daddy/internal/model"
|
||
|
errs "github.com/pkg/errors"
|
||
|
)
|
||
|
|
||
|
func handleIsAuthorized(ctx context.Context, action string, obj model.AuthorizationObject) (bool, error) {
|
||
|
db, err := getDB(ctx)
|
||
|
if err != nil {
|
||
|
return false, errs.WithStack(err)
|
||
|
}
|
||
|
|
||
|
var object interface{}
|
||
|
|
||
|
switch {
|
||
|
case obj.WorkgroupID != nil:
|
||
|
repo := model.NewWorkgroupRepository(db)
|
||
|
|
||
|
workgroup, err := repo.Find(ctx, *obj.WorkgroupID)
|
||
|
if err != nil {
|
||
|
return false, errs.WithStack(err)
|
||
|
}
|
||
|
|
||
|
object = workgroup
|
||
|
|
||
|
case obj.DecisionSupportFileID != nil:
|
||
|
repo := model.NewDSFRepository(db)
|
||
|
|
||
|
dsf, err := repo.Find(ctx, *obj.DecisionSupportFileID)
|
||
|
if err != nil {
|
||
|
return false, errs.WithStack(err)
|
||
|
}
|
||
|
|
||
|
object = dsf
|
||
|
|
||
|
case obj.UserID != nil:
|
||
|
repo := model.NewUserRepository(db)
|
||
|
|
||
|
user, err := repo.Find(ctx, *obj.UserID)
|
||
|
if err != nil {
|
||
|
return false, errs.WithStack(err)
|
||
|
}
|
||
|
|
||
|
object = user
|
||
|
|
||
|
default:
|
||
|
return false, errs.WithStack(ErrInvalidInput)
|
||
|
}
|
||
|
|
||
|
authorized, err := isAuthorized(ctx, object, model.Action(action))
|
||
|
if err != nil {
|
||
|
return false, errs.WithStack(err)
|
||
|
}
|
||
|
|
||
|
return authorized, nil
|
||
|
}
|