Я (очевидно) искал похожих проблем , но у меня их нет.
Вот мой случай:
- Я сделал кастом роль:
ROLE_SUPER_ADMIN
- Мой действительный пользователь
admin
, его единственная роль ROLE_SUPER_ADMIN
- Роль
ROLE_SUPER_ADMIN
наследует ROLE_ADMIN
(см. ниже) - Я пытаюсь получить доступ
/users/page/1
- Я получил
Access Denied by controller annotation @IsGranted(["ROLE_ADMIN", "ROLE_RESPONSIBLE"])
Вот мой контроллер:
//src/Controller/UserController.php
/**
* @Route("/users")
* @IsGranted("ROLE_USER")
*/
class UserController extends AbstractController
{
private $security;
private $mailer;
public function __construct(Security $security, MailerInterface $mailer)
{
$this->security = $security;
$this->mailer = $mailer;
}
/**
* @Route("/page/{!page}", name="user_index", requirements={"page"="\d+"}, defaults={"page":1})
* @IsGranted({"ROLE_ADMIN", "ROLE_RESPONSIBLE"})
*/
public function index(Request $request, UserRepository $userRepository, int $page = 1): Response
{
[....]
}
И моя пользовательская иерархия ролей
config/packages/security.yaml
security:
role_hierarchy:
ROLE_RESPONSIBLE: ROLE_USER
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: [ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
Я дважды проверил каждый символ на случай, если у меня есть опечатка, я не ...
Я думал, что это было похоже на &&
оценку (пользователь должен был получить ROLE_ADMIN
и ROLE_RESPONSIBLE
).
РЕДАКТИРОВАТЬ: Это была проблема, поведение по умолчанию - &&
оценка каждой роли в массиве, мне нужно было использовать * @Security("is_granted('ROLE_ADMIN') or is_granted('ROLE_RESPONSIBLE')")
Я пытался только с @IsGranted("ROLE_USER")
, он работал, но @IsGranted("ROLE_ADMIN")
нет, и это унаследованная роль
Я (все еще) могу ' Не вставляйте изображение, поверьте мне на слово или посмотрите мои доказательства здесь
Tha НКС заранее, понедельник - это понедельник, ты знаешь ...