#symfony #api-platform.com
#symfony #api-platform.com
Вопрос:
У меня проблема с моим API. Я работаю с платформой API, и я довольно новичок в этом, поэтому заранее извините, если мой вопрос может показаться глупым.
В моем API у меня есть администратор, модератор и несколько пользователей. Я хочу, чтобы только посетитель мог создавать учетные записи для пользователей. Таким образом, администратор, модератор и пользователь не могут создавать учетные записи пользователей.
Вот мой файл иерархии (security.yaml) :
role_hierarchy:
ROLE_MODERATOR: ROLE_USER
ROLE_ADMIN: ROLE_MODERATOR
Вот @ApiResource моего объекта User :
* @ApiResource(
* attributes={
* "normalization_context"={"groups"={"read-user"}},
* "denormalization_context"={"groups"={"write-user"}},
* "validation_groups"=AppValidatorValidationGroupsGenerator::class
* },
* collectionOperations={
* "get"={"method"="GET", "access_control"="is_granted('ROLE_MODERATOR')"},
* "post"={"method"="POST"}
* },
* itemOperations={
* "get"={"method"="GET", "access_control"="user.getId() === object.getId() or is_granted('ROLE_MODERATOR')"},
* "put"={"method"="PUT", "access_control"="user.getId() === object.getId() or is_granted('ROLE_MODERATOR')"}
* }
* )
Вот мой access_control (security.yaml) :
access_control:
- { path: ^/users, role: IS_AUTHENTICATED_ANONYMOUSLY, methods: [POST] }
Сценарий: Я пытаюсь создать учетную запись пользователя в качестве посетителя / пользователя / модератора / администратора
Моя ошибка: модератор, администратор и пользователь могут создать учетную запись пользователя
Ожидаемый результат: Создать учетную запись пользователя может только посетитель
Что я пробовал :
Я добавляю это в свою сущность
"post"={"method"="POST", "access_control"="user is null"}
Это не позволяет ролям создавать учетную запись пользователя (дает 403 запрещенных для них, чего я и хочу), но у меня есть токен 401 JWT, который не найден при попытке создать учетную запись в качестве посетителя сейчас.
Есть ли у вас какое-либо решение, которое могло бы мне помочь? Заранее спасибо
Ответ №1:
Решается путем ввода этого collectionOperations
в мою сущность User :
"post"={"method"="POST", "access_control"="is_granted('IS_AUTHENTICATED_FULLY') === false"}