add 2 directive handlers (authenticated, hasRole)

This commit is contained in:
Dawid Wysokiński 2021-03-06 12:02:26 +01:00
parent 49c8dd355a
commit 7da98d0f97
2 changed files with 43 additions and 0 deletions

View File

@ -0,0 +1,36 @@
package directive
import (
"context"
"fmt"
"github.com/99designs/gqlgen/graphql"
"github.com/zdam-egzamin-zawodowy/backend/internal/gin/middleware"
"github.com/zdam-egzamin-zawodowy/backend/internal/models"
errorutils "github.com/zdam-egzamin-zawodowy/backend/pkg/utils/error"
)
type Directive struct{}
func (d *Directive) Authenticated(ctx context.Context, obj interface{}, next graphql.Resolver, yes bool) (interface{}, error) {
_, err := middleware.UserFromContext(ctx)
if yes && err != nil {
return nil, errorutils.Wrap(err, messageMustBeSignedIn)
} else if !yes && err == nil {
return nil, fmt.Errorf(messageMustBeSignedOut)
}
return next(ctx)
}
func (d *Directive) HasRole(ctx context.Context, obj interface{}, next graphql.Resolver, role models.Role) (interface{}, error) {
user, err := middleware.UserFromContext(ctx)
if err != nil {
return nil, errorutils.Wrap(err, messageMustBeSignedIn)
}
if user.Role != role {
return nil, fmt.Errorf(messageUnauthorized)
}
return next(ctx)
}

View File

@ -0,0 +1,7 @@
package directive
const (
messageMustBeSignedIn = "Musisz być zalogowany by wykonać daną akcje."
messageMustBeSignedOut = "Musisz być wylogowany by wykonać daną akcje."
messageUnauthorized = "Brak uprawnień."
)