42 lines
975 B
Go
42 lines
975 B
Go
package access
|
|
|
|
import (
|
|
"RenewCMS/api/pkg/apperr"
|
|
"RenewCMS/internal/domain/role"
|
|
"RenewCMS/internal/infrastructure/useCases"
|
|
"context"
|
|
"errors"
|
|
"net/http"
|
|
)
|
|
|
|
type Caller = useCases.ContentCaller
|
|
|
|
type callerContextKey struct{}
|
|
|
|
func WithCaller(ctx context.Context, caller Caller) context.Context {
|
|
return context.WithValue(ctx, callerContextKey{}, caller)
|
|
}
|
|
|
|
func CallerOf(r *http.Request) Caller {
|
|
caller, _ := r.Context().Value(callerContextKey{}).(Caller)
|
|
return caller
|
|
}
|
|
|
|
func Grants(r *http.Request) role.GrantSet {
|
|
return CallerOf(r).Grants
|
|
}
|
|
|
|
func WriteMissingPermission(w http.ResponseWriter, key string) {
|
|
w.Header().Set(apperr.MissingPermissionHeader, key)
|
|
http.Error(w, apperr.MissingPermissionErrorMessage, http.StatusForbidden)
|
|
}
|
|
|
|
func WriteIfMissingPermission(w http.ResponseWriter, err error) bool {
|
|
var missing role.MissingPermissionError
|
|
if !errors.As(err, &missing) {
|
|
return false
|
|
}
|
|
WriteMissingPermission(w, missing.Key)
|
|
return true
|
|
}
|