Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

Restringir método de petición en una acción del controlador

21 de junio de 2015

Tengo un problema estoy tratando de validar que una acción de mi controlador solo pueda ser accedida a través de la petición POST haciendo lo siguiente:

/**
 * @Route("/asignar_area/{id}", name = "asignar_area")
 * @Method("POST")
 */

Pero una vez que hago esto entonces no me funciona en el access_control la restricción sobre esta url dado que me devuelve el error "405 Method Not Allowed". Al parecer realiza primero la comprobación del tipo de petición y luego revisa el control de acceso.

Aquí esta como lo tengo en el security.yml:

- { path: ^/queja/asignar_area, roles: ROLE_ASESOR }

Si quito la anotación @Method, entonces si me redirecciona al login. ¿Cómo pudiera cambiar este comportamiento?

Gracias de antemano.


Respuestas

#1

Creo que habría al menos dos formas de hacerlo. La primera sería configurar el método en la propia regla de access_control (aquí puedes ver todas las opciones de configuración de access_control):

# app/config/security.yml
security:
    # ...
    access_control:
        - { path: ^/queja/asignar_area, roles: ROLE_ASESOR, methods: [POST] }

La segunda opción sería eliminar la regla del access_control y configurar la seguridad en el propio controlador con la anotación @Security:

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
 
/**
 * @Route("/asignar_area/{id}", name = "asignar_area")
 * @Security("has_role('ROLE_ASESOR')")
 * @Method("POST")
 */

@javiereguiluz

21 junio 2015, 10:59