directus / directus

The flexible backend for all your projects 🐰 Turn your DB into a headless CMS, admin panels, or apps with a custom UI, instant APIs, auth & more.

Home Page:https://directus.io

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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

hanneskuettner opened this issue · comments

Describe the Bug

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

} else if (String(key).startsWith('item__') && isObjectLike(value)) {
return { [`item:${String(key).split('item__')[1]}`]: parseFilter(value, accountability, context) } as Filter;

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 #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