Search code examples
restreact-admin

Support for resource nesting


I am wondering, is it possible to configure DataProvider/Resource/List to support REST urls like api/users/1/roles?

For RESTful API it is very common use case to get childs of certain parent entity, but I cant figure it how to setup React Admin and achieve this. I am using custom DataProvider build on OData spec backend.

I understand that I can get roles of certain user by filtered request on api/roles?filter={userId: 1} or something like that, but my issue is that my users and roles are in many-to-many relation so relation references are stored in pivot table. In other words, I dont have reference on user in roles table so I cant filter them.

Am I overseeing something or is there some approach which I simply dont see?

EDIT: REST API is built in OData spec and it supports many-to-many relations with classic pivot (or intermediate) table. This table is not exposed in API, but is utilized in urls like the one above. So I cant directly access it as a resource.

Schema for User - Role relations looks pretty standard too.

|----------|    |-----------|     |--------|
| USER     |    | User_Role |     | Role   |
|----------|    |-----------|     |--------|
| Id       |-\  | Id        |   /-| Id     |
| Login    |  \-| UserId    |  /  | Name   |
| Password |    | RoleId    |-/   | Code   |
|----------|    |-----------|     |--------|

Solution

  • TL;DR: By default, React Admin doesn't support nested resource, you have to write a custom data provider.

    This question was answered on a past issue: maremelab/react-admin#261

    Detailed Answer

    The default data provider in React Admin is ra-data-simple-rest.

    As explained on its documentation, this library doesn't support nested resources since it only use the resource name and the resource ID to build a resource URL:

    Simple REST Data Provider

    In order to support nested resources, you have to write your own data provider.

    Nested resources support is a recurrent feature request but, at the time, the core team don't want to handle this load of work.

    I strongly suggest to gather your forces and write an external data provider and publish it like ra-data-odata provider. It would be a great addition and we will honored to help you with that external package.