Hola,
Estuve leyendo este articulo https://www.symfony.fi/entry/whats-on-the-menu-symfony y se adapta precisamente a lo que necesito hacer. Deseo generar una serie de menús y submenus pero con la idea de luego generar en la administración la capacidad de darle permiso a usuarios específicos sobre los diferentes menus a los que deberían poder acceder.
Luego tengo pensado según el articulo usar KnpMenuBundle para gestionar los menus pero más que eso, KtwDatabaseMenuBundle para poderlos persistir en base de datos y luego aplicar Voters o ACL (me parece que con Voters se resuelve el problema) sobre los menus ya previamente guardados.
Necesitaría algún consejo de alguien que haya implementado esta solución, alguna idea de como hacerlo mejor o si esta manera que tengo pensado es lo correcto.
Respuestas
Nunca he hecho algo como lo que me comentas, pero desde el punto de vista teórico sí que parece una solución apropiada. Eso así, a menos que sepas usar y te gusten las ACL de Symfony, te recomiendo que siempre uses los Voters, que funcionan igual pero son infinitamente más fáciles de usar.
Por otra parte, si en tu caso los menús son bastante estándar, es decir, si solo hay 3 o 4 tipos de menús en función del tipo de usuario y no hay infinitos posibles menús para cada usuario, puedes simplificar todo esto mucho más. Solo tendrías que definir esos pocos menús (estandar
, editor
, admin
, etc.) y cargar el menú correspondiente en función del rol del usuario.
@javiereguiluz
Gracias por tu pronta respuesta javier, la idea es que por ejemplo dentro del ROLE_TRABAJADOR al usuario javier_eguiluz le permito ver el menu "admin" pero en cambio al usuario roberto (con el mismo ROLE_TRABAJADOR) no tendria permiso en "admin" pero si en "estandar". Creo que es demasiado granular lo que quiero hacer como para usar Voters.
De todas maneras voy a analizar bien la situacion e interiorizar tus palabras "Las ACL o listas de control de acceso son la forma más granular de otorgar permisos en las aplicaciones Symfony2. Utilizando una ACL es posible indicar si un determinado usuario tiene un determinado permiso sobre un determinado objeto.". Quizas la sencillez de los Voters me alcance para solucionar el problema.
Saludos.
@RoberRielo