27 lines
669 B
Go
27 lines
669 B
Go
package auth
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
|
|
"github.com/99designs/gqlgen/graphql"
|
|
"github.com/traggo/server/generated/gqlmodel"
|
|
)
|
|
|
|
// HasRole checks if the current user has sufficient permissions.
|
|
func HasRole() func(ctx context.Context, obj interface{}, next graphql.Resolver, role gqlmodel.Role) (res interface{}, err error) {
|
|
return func(ctx context.Context, obj interface{}, next graphql.Resolver, role gqlmodel.Role) (interface{}, error) {
|
|
user := GetUser(ctx)
|
|
|
|
if user == nil {
|
|
return nil, errors.New("you need to login")
|
|
}
|
|
|
|
if role == gqlmodel.RoleAdmin && !user.Admin {
|
|
return nil, errors.New("permission denied")
|
|
}
|
|
|
|
return next(ctx)
|
|
}
|
|
}
|