added dumy request info to directly return an error on invalid API rule

This commit is contained in:
Gani Georgiev 2025-11-22 10:58:32 +02:00
parent 3c6ce2de74
commit 9b73295a7c
3 changed files with 5 additions and 4 deletions

View File

@ -489,7 +489,7 @@ func (validator *collectionValidator) checkRule(value any) error {
return nil // nothing to check return nil // nothing to check
} }
r := NewRecordFieldResolver(validator.app, validator.new, nil, true) r := NewRecordFieldResolver(validator.app, validator.new, &RequestInfo{}, true)
_, err := search.FilterData(vStr).BuildExpr(r) _, err := search.FilterData(vStr).BuildExpr(r)
if err != nil { if err != nil {
return validation.NewError("validation_invalid_rule", "Invalid rule. Raw error: "+err.Error()) return validation.NewError("validation_invalid_rule", "Invalid rule. Raw error: "+err.Error())

View File

@ -319,8 +319,8 @@ func TestCollectionValidate(t *testing.T) {
c.ListRule = types.Pointer("!invalid") c.ListRule = types.Pointer("!invalid")
c.ViewRule = types.Pointer("missing = 123") c.ViewRule = types.Pointer("missing = 123")
c.CreateRule = types.Pointer("id = 123 && missing = 456") c.CreateRule = types.Pointer("id = 123 && missing = 456")
c.UpdateRule = types.Pointer("(id = 123") c.UpdateRule = types.Pointer("@request.body.missing:changed = false")
c.DeleteRule = types.Pointer("missing = 123") c.DeleteRule = types.Pointer("(id=123")
return c, nil return c, nil
}, },
expectedErrors: []string{"listRule", "viewRule", "createRule", "updateRule", "deleteRule"}, expectedErrors: []string{"listRule", "viewRule", "createRule", "updateRule", "deleteRule"},
@ -333,7 +333,7 @@ func TestCollectionValidate(t *testing.T) {
c.ListRule = types.Pointer("") c.ListRule = types.Pointer("")
c.ViewRule = types.Pointer("f1 = 123") c.ViewRule = types.Pointer("f1 = 123")
c.CreateRule = types.Pointer("id = 123 && f1 = 456") c.CreateRule = types.Pointer("id = 123 && f1 = 456")
c.UpdateRule = types.Pointer("(id = 123)") c.UpdateRule = types.Pointer("(id = 123 && @request.body.f1:changed = false)")
c.DeleteRule = types.Pointer("f1 = 123") c.DeleteRule = types.Pointer("f1 = 123")
return c, nil return c, nil
}, },

View File

@ -80,6 +80,7 @@ func (r *runner) run() (*search.ResolverResult, error) {
} }
if r.activeProps[0] == "@request" { if r.activeProps[0] == "@request" {
// @todo consider returning an error instead?
if r.resolver.requestInfo == nil { if r.resolver.requestInfo == nil {
return &search.ResolverResult{Identifier: "NULL"}, nil return &search.ResolverResult{Identifier: "NULL"}, nil
} }