57 lines
1.4 KiB
Go
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)
|
|
}
|