операции с несколькими объектами is_granted не работают - платформа API - PullRequest
0 голосов
/ 27 сентября 2019

Я пытаюсь обезопасить свою почтовую операцию с объектом, разрешив ему 3 роли.ROLE_ADMIN, ROLE_USER и ROLE_LEADER.У каждого пользователя есть только одна роль.

Когда я тестировал, работает ли он, удалив ROLE_LEADER из приведенного ниже кода, я обнаружил, что пользователь с ROLE_LEADER все еще может создавать пользователя.

У меня естьпопытался сделать какую-то ошибку, если изменения происходят, они есть.

У меня есть следующая операция:

/**
 * @ORM\Entity(repositoryClass="App\Repository\UserRepository")
 * @ApiResource(
 *    itemOperations={
 *         "post"={"access_control"="is_granted('ROLE_ADMIN') or is_granted('ROLE_USER')", "access_control_message"="You are not owner of this user."},
 *         "delete"={"access_control"="
                is_granted('ROLE_ADMIN')
                or (is_granted('ROLE_USER') and (previous_object.getOwner() == user or previous_object.getOwner().getOwner() == user))
                or (is_granted('ROLE_LEADER') and previous_object.getOwner() == user)
            ", "access_control_message"="You are not owner of this user."},
 *     },
 * )
 */

Операция удаления работает, как и ожидалось, однако я не могу понять, почему я все еще могусоздать пользователя, когда я публикую данные от пользователя, у которого есть ROLE_LEADER.

Спасибо за ваше время

Ответы [ 2 ]

0 голосов
/ 30 сентября 2019

Решение состояло в том, что мне нужно было переместить

"post"={"access_control"="is_granted('ROLE_ADMIN') or is_granted('ROLE_USER')", "access_control_message"="You are not owner of this user."},

из itemOperations в collectionOperations

0 голосов
/ 29 сентября 2019

Каждый пользователь, который входит в систему, всегда имеет как минимум роль ROLE_USER.См. документацию для получения дополнительной информации.

Следовательно, is_granted('ROLE_ADMIN') or is_granted('ROLE_USER') означает, что любому вошедшему в систему пользователю предоставляется доступ (из-за or is_granted('ROLE_USER')), и поэтому ваш пользователь с ROLE_LEADER все еще может публиковать данные (потому что этот пользователь будет также * имеют роль ROLE_USER).

Решение состоит в том, чтобы создать другую роль пользователя и использовать ее вместо этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...