Разрешить публикацию только в том случае, если пользователь не подключен в платформе API - PullRequest
0 голосов
/ 19 марта 2019

У меня проблема с моим API. Я работаю с API Platform, и я довольно новичок в этом, поэтому заранее прошу прощения, если мой вопрос может быть глупым.

В моем API есть администратор, модератор и несколько пользователей. Я хочу, чтобы только посетитель мог создавать учетные записи для пользователей. Таким образом, администратор, модератор и пользователь не могут создавать учетные записи пользователей.

Вот мой файл иерархии (security.yaml):

role_hierarchy:
    ROLE_MODERATOR: ROLE_USER
    ROLE_ADMIN: ROLE_MODERATOR

Вот @ApiResource моего Entity User:

 * @ApiResource(
 *     attributes={
 *         "normalization_context"={"groups"={"read-user"}},
 *         "denormalization_context"={"groups"={"write-user"}},
 *         "validation_groups"=App\Validator\ValidationGroupsGenerator::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 Forbidden для них, чего я и хочу), но у меня есть 401 токен JWT, не найденный при попытке создать учетную запись в качестве посетителя сейчас.

У вас есть решение, чтобы помочь мне? Заранее спасибо

1 Ответ

2 голосов
/ 19 марта 2019

Решено, поместив это в collectionOperations в моем Entity User:

"post"={"method"="POST", "access_control"="is_granted('IS_AUTHENTICATED_FULLY') === false"}
...