directus / directus

The Modern Data Stack 🐰 — Directus is an instant REST+GraphQL API and intuitive no-code data collaboration app for any SQL database.
https://directus.io
Other
25.77k stars 3.59k forks source link

`parseFilter` incorrectly converts entry names starting with `item__` to `item:` #22502

Open hanneskuettner opened 2 weeks ago

hanneskuettner commented 2 weeks ago

Describe the Bug

The parseFilter utility function always converts filter entry names that start with item__ and are objects to item::

https://github.com/directus/directus/blob/333ec524ee92496183fd6602850aeb933c54e9d6/packages/utils/shared/parse-filter.ts#L119-L120

This could potentially lead to problems when the user actually has a field named item__<something> and wants to filter that field. This conversion was initially introduced in https://github.com/directus/directus/pull/15162 as fix to not being able to filter M2A relations in GraphQL.

This functionality needs to be retained, but either pulled out of parseFilter or only optionally apply, if we know that the filters are coming from GraphQL (and are actually within a M2A? Cause otherwise the same problem persists in GraphQL. Or that is then just an inherent restriction of GraphQL, similar to reserved keywords or collections starting with underscore).

Additionally, this simple replacement breaks if the user uses a different field name, other than item in their M2A relation setup.

To Reproduce

N/A

Directus Version

v10.11.0

Hosting Strategy

Self-Hosted (Docker Image)

Database

No response