1
0
mirror of https://github.com/pocketbase/pocketbase.git synced 2025-03-19 22:19:23 +02:00

[#6590] apply nullifyMisingField for request.auth.* and request.body.* back relations when the relation field is pointing to a different collection

This commit is contained in:
Gani Georgiev 2025-03-14 22:53:46 +02:00
parent 4ced91f95d
commit 24c4b63960
3 changed files with 16 additions and 2 deletions

View File

@ -22,6 +22,8 @@
- Bumped the default request read and write timeouts to 5mins (_old 3mins_) to accommodate slower internet connections and larger file uploads/downloads.
_If you want to change them you can modify the `OnServe` hook's `ServeEvent.ReadTimeout/WriteTimeout` fields as shown in [#6550](https://github.com/pocketbase/pocketbase/discussions/6550#discussioncomment-12364515)._
- Normalized the `@request.auth.*` and `@request.body.*` back relations resolver to always return `null` when the relation field is pointing to a different collection ([#6590](https://github.com/pocketbase/pocketbase/discussions/6590#discussioncomment-12496581)).
- Updatated `modernc.org/sqlite` to 1.36.0 (SQLite 3.49.0).

View File

@ -479,7 +479,11 @@ func (r *runner) processActiveProps() (*search.ResolverResult, error) {
}
return nil, fmt.Errorf("missing back relation field %q", parts[2])
}
if backField.Type() != FieldTypeRelation {
if r.nullifyMisingField {
return &search.ResolverResult{Identifier: "NULL"}, nil
}
return nil, fmt.Errorf("invalid back relation field %q", parts[2])
}
@ -492,7 +496,11 @@ func (r *runner) processActiveProps() (*search.ResolverResult, error) {
return nil, fmt.Errorf("failed to initialize back relation field %q", backField.GetName())
}
if backRelField.CollectionId != collection.Id {
return nil, fmt.Errorf("invalid back relation field %q collection reference", backField.GetName())
// https://github.com/pocketbase/pocketbase/discussions/6590#discussioncomment-12496581
if r.nullifyMisingField {
return &search.ResolverResult{Identifier: "NULL"}, nil
}
return nil, fmt.Errorf("invalid collection reference of a back relation field %q", backField.GetName())
}
// join the back relation to the main query

View File

@ -601,7 +601,8 @@ func TestRecordFieldResolverResolveCollectionFields(t *testing.T) {
{"self_rel_many.self_rel_many.self_rel_many.self_rel_many.self_rel_many.self_rel_many.self_rel_many.id", true, ""},
// back relations
{"rel_one_cascade.demo4_via_title.id", true, ""}, // non-relation via field
{"rel_one_cascade.demo4_via_title.id", true, ""}, // not a relation field
{"rel_one_cascade.demo4_via_self_rel_one.id", true, ""}, // relation field but to a different collection
{"rel_one_cascade.demo4_via_rel_one_cascade.id", false, "[[demo4_rel_one_cascade_demo4_via_rel_one_cascade.id]]"},
{"rel_one_cascade.demo4_via_rel_one_cascade.rel_one_cascade.demo4_via_rel_one_cascade.id", false, "[[demo4_rel_one_cascade_demo4_via_rel_one_cascade_rel_one_cascade_demo4_via_rel_one_cascade.id]]"},
@ -615,8 +616,11 @@ func TestRecordFieldResolverResolveCollectionFields(t *testing.T) {
// @request.auth relation join
{"@request.auth.rel", false, "[[__auth_users.rel]]"},
{"@request.auth.rel.title", false, "[[__auth_users_rel.title]]"},
{"@request.auth.demo1_via_rel_many.id", false, "[[__auth_users_demo1_via_rel_many.id]]"},
{"@request.auth.rel.missing", false, "NULL"},
{"@request.auth.missing_via_rel", false, "NULL"},
{"@request.auth.demo1_via_file_one.id", false, "NULL"}, // not a relation field
{"@request.auth.demo1_via_rel_one.id", false, "NULL"}, // relation field but to a different collection
// @collection fieds
{"@collect", true, ""},