Używam więc platformy API w moim projekcie Symfony 4, a ja przeczytałem, że obsługuje Graphql, więc skonfigurowałem kontrolę dostępu w Security.yml, aby umożliwić użytkownikom dostęp do API GraphQL:

- { path: ^/api/graphql, roles: IS_AUTHENTICATED_ANONYMOUSLY }

A w każdym podmiotu mam kontrole dostępu do opóźnień i kolekcjonerów. Przykład:

 * @ApiResource(
 *     itemOperations={
 *         "get"={
 *             "access_control"="is_granted('ROLE_ADMIN')"
 *         }
 *     },
 *     collectionOperations={
 *         "get"={
 *             "access_control"="is_granted('ROLE_ADMIN')"
 *         }
 *     }
 * )

Ale problem polega na tym, że każdy użytkownik może uzyskać dostęp do tego podmiotu poprzez Graphql, ponieważ Graphql ignoruje kontrole dostępu do tych operacji. Czy istnieje sposób, aby wymusić Graphql do przestrzegania tych zasad?

2
Osama Aref 14 styczeń 2020, 09:38

1 odpowiedź

Najlepsza odpowiedź

itemOperations i collectionOperations nie są związane z GraphQL, ale tylko do odpoczynku.

Musisz dodać kontrole dostępu w operacjach Graphql lub, jeśli chcesz docelowywać odpoczynek i Graphql (bez rozróżniania operacji), możesz dodać go jako attribute.

Również access_control jest przestarzały. Zamiast tego powinieneś użyć security.

Możesz także przeczytać tę dokumentację: https://api-platform.com/docs/ Rdzeń / Graphql / # Security

1
Alan Poulain 14 styczeń 2020, 10:00