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 }