В настоящее время существует страница оформления заказа с безопасностью, как показано ниже.

/**
 * @Route("/checkout")
 * @Security("has_role('ROLE_ADMIN')")
 */

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

Я могу сделать это, сняв защиту и добавив условие в каждое действие.

Так есть ли у Symfony какой-нибудь способ легко с этим справиться?

0
Ghost Rider 24 Июл 2017 в 13:04
Можешь ли ты положить свой файл security.yml
 – 
Barkati.med
24 Июл 2017 в 13:06
Самый простой способ - это брандмауэр Symfony
 – 
katona.abel
24 Июл 2017 в 13:08
Если вам нужны индивидуальные условия для вашей страницы, вы должны указать каждое действие.
 – 
Carca
24 Июл 2017 в 13:34
Я думаю, вы ищете избирателей symfony.com/doc/current/security/voters. html
 – 
Jakub Matczak
24 Июл 2017 в 14:46

2 ответа

У вас есть много возможностей:

  1. @Security и сделайте что-нибудь вроде:

    /**
     * @Route("/{id}/edit", name="admin_post_edit")
     * @Security("user.getEmail() == post.getAuthorEmail()")
    */
    public function editAction(Post $post)
    {
        // ...
    }
    

Обратите внимание: у вас всегда есть доступ к пользователю, а также у вас есть доступ к объекту post, потому что у вас есть Post $post. Иногда вам может понадобиться @ParamConverter для.

  1. Просто выполните условие, и если оно истинно: throw $this->createAccessDeniedException('You cannot access this page!');

  2. Для более сложных элементов управления вы можете использовать избирателя (https://symfony.com/doc /current/security/voters.html)

  3. Для очень сложных элементов управления: ACL (https://symfony.com/doc/current/security /acl.html)

0
mpiot 24 Июл 2017 в 17:41

Вы можете создать свою собственную функцию, которая будет предоставлять доступ или нет, а затем вызывать ее из аннотации. Эта функция может быть чем-то вроде

return hasRole('ROLE_ADMIN') || anotherCondition();

Подробнее здесь https://symfony.com/doc/current/best_practices/security. html # security-избиратели

0
Strnm 26 Июл 2017 в 14:20