This repository has been archived on 2024-04-07. You can view files and clone it, but cannot push or open issues or pull requests.
summer-utils/api/crud/single-perm.go
2023-04-16 11:56:17 +01:00

57 lines
1.4 KiB
Go

package crud
import (
"code.mrmelon54.com/melon/summer/pkg/claims/auth"
)
type singlePermProvider[T any] struct {
perm string
provider CheckedProvider[T]
}
func NewSinglePermProvider[T any](perm string, provider CheckedProvider[T]) Provider[T] {
return &singlePermProvider[T]{perm, provider}
}
func (s *singlePermProvider[T]) Find(claims *auth.AccessTokenClaims) ([]T, error) {
if !claims.Perms.Has(s.perm) {
return nil, ErrForbidden
}
return s.provider.Find()
}
func (s *singlePermProvider[T]) Add(claims *auth.AccessTokenClaims, item T) (T, error) {
if !claims.Perms.Has(s.perm) {
return *new(T), ErrForbidden
}
return s.provider.Add(item)
}
func (s *singlePermProvider[T]) Get(claims *auth.AccessTokenClaims, id string) (T, bool, error) {
if !claims.Perms.Has(s.perm) {
return *new(T), false, ErrForbidden
}
return s.provider.Get(id)
}
func (s *singlePermProvider[T]) Put(claims *auth.AccessTokenClaims, id string, item T) error {
if !claims.Perms.Has(s.perm) {
return ErrForbidden
}
return s.provider.Put(id, item)
}
func (s *singlePermProvider[T]) Patch(claims *auth.AccessTokenClaims, id string, item T) error {
if !claims.Perms.Has(s.perm) {
return ErrForbidden
}
return s.provider.Patch(id, item)
}
func (s *singlePermProvider[T]) Delete(claims *auth.AccessTokenClaims, id string) error {
if !claims.Perms.Has(s.perm) {
return ErrForbidden
}
return s.provider.Delete(id)
}