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

Control de acceso basado en actions y controllers

25 de febrero de 2014

Hola, verán, vengo de usar Yii Framework, un buen framework, y ahora quiero aventurarme con Symfony, un excelente framework. Una de las cosas que ahora estoy revisando es la gestión de usuarios y permisos. He revisado FOSUserBundle y he leído la doc de Book Security y no termina de convencerme. En Yii Framework exite Cruge, tal vez el módulo más usado para gestión de usuarios y permisos.

A grandes rasgos este módulo (Cruge) lo que hace es coger todas las acciones de cada controlador y guardarlos en una base de datos, luego desde un administrador puedes decidir qué roles pueden acceder a cada acción. Esta es una imagen que lo puede describir mejor.

Mi pregunta es: ¿Existe algun bundle actualmente que haga esto en Symfony2?

Gracias.


Respuestas

#1

@ramiroanacona, que yo sepa no existe nada parecido en Symfony2, ni siquiera como bundle desarrollado por terceros. Lo que sí tienes es la anotación Security que es bastante potente para restringir el acceso a tus acciones:

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
 
class PostController extends Controller
{
    /**
     * @Security("has_role('ROLE_ADMIN')")
     */
    public function indexAction()
    {
        // ...
    }
}

Además de la función has_role que comprueba si el usuario que solicita la acción tiene el role necesario para acceder a ella, puedes acceder a otros valores y variables del usuario y de la petición para crear expresiones y condiciones muy complejas.

Incluso puedes crear condiciones basadas en las propias variables de la ruta y del controlador. En este ejemplo se comprueba si el usuario que quiere ver un post tiene el role POST_SHOW sobre el post específico que quiere ver:

/**
 * @Security("is_granted('POST_SHOW', post)")
 */
public function showAction(Post $post)
{
}

No te olvides tampoco de los security voters que es lo que recomiendan los creadores de Symfony en lugar de las tradicionales ACL.

@javiereguiluz

25 febrero 2014, 9:03
#2

¿Alguno de ustedes tiene un ejemplo de implementación de los security voters?

@SakyaStelios

1 marzo 2014, 22:57
#3

Aquí tienes un ejemplo que comprueba si el usuario que quiere modificar una entidad es el mismo usuario que la creó:

@javiereguiluz

2 marzo 2014, 20:49