Разрешить метод post только тогда, когда пользователь не подключен к платформе API

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