Categoría: Desarrollo Web

Symfony 4 y Sonata Admin: seguridad mediante voters

Symfony Sonata Voters

Si estamos desarrollando nuestra aplicación web en Symfony 4 y hemos optado por usar como “bundle” de administración Sonata, llegará un momento si la aplicación es medianamente compleja que tendremos que definir la gestión de privilegios a aplicar a los usuarios que pueden acceder al entorno de administración o “backend”. La documentación de Sonata nos da básicamente 2 alternativas para gestionar la seguridad: Gestión mediante ROLES (sonata.admin.security.handler.role) La gestión mediante ROLES consiste en definir roles a los que asociar a los usuarios y en función de dichos roles dar acceso a modificar, eliminar, etc las diferentes entidades de la aplicación. Esta opción es poco flexible ya que si le das permiso a un rol para modificar un tipo de objeto podrá modificar todos los objetos de ese tipo sin restricción. Gestión mediante Listas de control de acceso ACL (sonata.admin.security.handler.acl) La gestión mediante ACL es bastante compleja y en Symfony 4 se ha eliminado del desarrollo principal y se necesita instalar un “bundle” adicional para disponer de ella:  ACL Bundle. Como alternativa a ACL en la documentación de Symfony se recomienda usar voters, combinándolos con los roles de usuario podemos abordar la gestión de privilegios en Sonata sin necesidad de implementar ACL. Puedes ver y descargar todo el código que comentaré a continuación desde los enlaces de interés. Combinando roles y voters en Symfony 4 y Sonata Vamos a plantear un ejemplo en el que ver el uso de voters de forma sencilla. Estamos desarrollando una aplicación web para la gestión de concesionarios de una marca de automóviles, los usuarios con el rol de “concesionario” tendrán acceso de edición a los vehículos vendidos o por vender. Los propietarios de los vehículos podrán ver aquellos vehículos que posean y los administradores de la plataforma tendrán todos esos privilegios y también la opción de eliminar los vehículos. Existirán por tanto estos roles en la aplicación: ROLE_ADMIN (Administradores) ROLE_CONCESIONARIO (trabajadores del concesionario) ROLE_PROPIETARIO (Propietario de vehículos) Por comodidad en la administración, usaremos los grupos de usuarios que proporciona Sonata User Bundle y crearemos 3 grupos de usuarios. Con el propio panel de administración de Sonata aparte de asignar los usuarios a grupos también podremos darle roles específicos si fuese necesario, los 3 grupos de usuarios serían:   La estructura de la base de datos quedaría de la siguiente forma:   La configuración de roles en config/packages/security.yaml para implementar la política de seguridad deseada quedaría de la siguiente forma: [crayon-5e2bddb7bda8a853827202/] Con esta configuración de roles delimitamos los accesos por objetos, los administradores pueden listar, editar, crear, ver y eliminar vehículos, los concesionarios listar, editar y ver y los propietarios solo listar y ver. Sin el uso de voters estos privilegios son generales y da igual si los vehículos pertenecen o no a un concesionario que los usuarios con ese rol los podrán editar todos al igual que un propietario podrá ver cualquier vehículo sin necesidad de que le pertenezca. Mantengo el rol de superusuario (ROLE_SUPER_ADMIN) que tendrá acceso a todo por encima de nuestra política de seguridad. Para añadir el uso de voters debemos realizar los siguientes cambios en los archivos de configuración: config/packages/security.yaml [crayon-5e2bddb7bda93201543528/]   Añadimos la estrategia “unanimous” al determinar el acceso o no, ya que nosotros vamos a definir unas políticas mediante voters pero aparte tenemos los Roles, al obligar a que la decisión sea unánime, todas las políticas deben permitir el acceso para que éste se conceda. Se pueden ver las diferentes estrategias disponibles en la documentación de Symfony. config/packages/sonata_admin.yaml [crayon-5e2bddb7bda97211041337/]   Definimos nuestro propio gestor de seguridad en la configuración de Sonata Admin, y vamos a implementarlo, creamos el archivo src/Security/Handler/VoterSecurityHandler.php con el siguiente contenido: [crayon-5e2bddb7bda99874473895/] Esta clase con ligeras variaciones la obtuve de este gran artículo (Usando Voters con Sonata) de Sergio Gómez, que explica e implementa el sistema de voters con Sonata en versiones de Symfony anteriores a la 4. Te recomiendo que consultes en artículo de Sergio para obtener más información del funcionamiento de la clase.   Damos de alta el servicio en config/services.yaml: [crayon-5e2bddb7bda9b946065041/]   Ahora vamos a crear nuestro voter para el objeto vehículo que determinará quien puede hacer qué con él según los criterios que hemos establecido. Creamos el archivo src/Voter/VehiculoVoter.php con el siguiente contenido: [crayon-5e2bddb7bdaa3661282056/] Con el método “supports” nos aseguramos que el objeto se del tipo deseado (Vehículo) y que las acciones a comprobar sean las que tiene definidas dicho objeto. Luego con el método “votoOnAttribute” implementamos la lógica que queremos, en la línea 30 damos acceso completo a los usuarios que tienen los roles SUPER_ADMIN y/o ADMIN, de la 34 a la 39 comprobamos para aquellos usuarios con rol CONCESIONARIO que el vehículo en cuestión esté dado de alta en al menos uno de los concesionarios en los que están dados de alta los usuarios, y por último de la línea 41 a la 44 comprobamos que los usuarios con el rol PROPIETARIO además sean propietarios del vehículo. Un tema importante a tener en cuenta es que es recomendable ir de roles con más privilegios a menos, así aquellos usuarios que tengan varios roles por ejemplo un usuario que esté a la vez en el grupo de administradores y concesionarios, con la primera comprobación ya se le concede el acceso si lo hacemos al revés habría que pasar por varias comprobaciones. Ahora ya tenemos implementada la política de seguridad deseada, salvo un detalle, Sonata en los listados no aplica los voters y muestra todos los resultados, por ejemplo si accedemos con el usuario “propietario1” al listado de vehículos vemos los siguiente:   El usuario “propietario1” solo puede entrar en la ficha del vehículo del que es propietario tal y como hemos definido en el voter, pero sí puede ver el resto de vehículos aunque no sean suyos, para solventarlo debemos modificar la consulta encargada de generar el listado, modificamos la clase Admin de vehículo para Sonata: [crayon-5e2bddb7bdaa5943767327/]   Si volvemos a acceder al listado de vehículos con el usuario “propietario1”, tenemos el listado que buscamos:   Este sería el listado

Más info

Campos personalizados en formularios de edición para Prestashop 1.7

Prestashop

En este artículo vamos a hablar sobre la creación de módulos en Prestashop 1.7 y más concretamente hablaremos sobre la creación de campos personalizados en formularios de edición. Cuando estamos creando módulos en Prestashop, la creación de formularios de edición es fundamental, ya que mediante esta edición podemos interactuar con los datos que guardamos: leerlos, actualizarlos… Para la creación de formularios de edición en Prestashop, necesitamos utilizar la clase HelperForm. Esta clase nos ofrece unos tipos de campos concretos: ‘text’, ‘select’, ‘textarea’, ‘radio’, ‘checkbox’, ‘file’, ‘shop’, ‘asso_shop’, ‘free’, ‘color’. Esta sería una declaración de campo básico, campo de texto, para un formulario de edición: [crayon-5e2bddb7be1df565511006/] Pero además de crear campos básicos, puede que necesitemos crear algún tipo de campo especial, que podamos personalizar, para que trabaje de una forma concreta… distinto a los que Prestashop nos ofrece por defecto. Esto se realizaría de la siguiente forma para módulos creados utilizando “Modelo – Vista – Controlador”. La estructura MVC se encarga de separar la lógica de negocio de la interfaz de usuario, para seguir esta estructura en la creación de módulos, tendremos que crear las siguientes carpetas dentro del módulo: mimodulo/models mimodulo/views/templates/admin/_configure/helpers/form mimodulo/controllers/admin El ejemplo que vamos a mostrar, crea un campo personalizado, que nos servirá para seleccionar artículos con un ‘autocomplete’ y retornarlos en el mismo campo personalizado, para posteriormente excluirlos en un proceso concreto. Sigue estos sencillos pasos: 1.- Dentro de la carpeta del controlador (mimodulo/controllers/admin/AdminAvanzaTestController.php), donde creamos el formulario de edición, introducimos el siguiente código: [crayon-5e2bddb7be1e4516118571/] Este código nos crea un campo llamado AVANZA_TEST_PERSONALIZADO, el cual vamos a personalizar en el siguiente paso. 2.- Dentro de la carpeta de vista (mimodulo/views/templates/admin/_configure/helpers/form/form.tpl) introducimos el siguiente código, que será el que nos dé los datos a mostrar y la funcionalidad autocomplete del campo. [crayon-5e2bddb7be1e7772563202/] 3º.- El tratamiento de estos datos se realizaría de nuevo en la carpeta del controlador (mimodulo/controllers/admin/AdminAvanzaTestController.php). Introducimos el siguiente código: [crayon-5e2bddb7be1e9316573438/] De esta forma hemos conseguido crear un campo de una forma y características concretas… y de forma relativamente sencilla. Al igual que hemos creado este campo, podemos crear cualquier otro campo que necesitemos dándole las características y funcionamiento necesarios.

Más info

Bootstrap 4 o cómo maquetar una web fácilmente

modal bootstrap

¡Por fin! Ya está disponible  Bootstrap 4. El 18 de Enero fue el día de lanzamiento, no más alphas (versiones de prueba). ¿Qué es Bootstrap 4?: Es un framework para web o conjunto de herramientas de código abierto para poder maquetar y diseñar páginas y aplicaciones web adaptadas a cualquier dispositivo (sobremesa, portátil, tablet y móvil). Entre otros muchos elementos dispone de menús de navegación, formularios, botones, modals, barras de progreso…. y otros componentes basados en HTML y CSS que incorporan JavaScript para realizar todas las funcionalidades. Algo de Historia: Bootstrap “nació” en las instalaciones de Twitter en el año 2011 y rápidamente se extendió su uso dada su simplicidad, gran utilidad y coste 0. Ya es uno de los frameworks más utilizados por los desarrolladores web y todo indica que seguirá siéndolo. Fue a partir de la versión 2.0 cuando se incorporó el diseño responsivo a Bootstrap, y en agosto del 2013 se lanzó Bootstrap 3, muy vigente a día de hoy. Características principales: Código abierto: es una política que mantienen desde la versión 1, Bootstrap es una herramienta gratuita y accesible para todo el mundo. Documentación y aprendizaje: dispone de una documentación amplia, bien organizada y con multitud de ejemplos. La curva de aprendizaje es moderada, en poco tiempo se podrá sacar partido a todo lo que ofrece. HTML5 y CSS3: incorpora las últimas versiones de HTML y CSS. Optimización: todo el código que usa está optimizado para que la web que lo usa cargue rápidamente. Sistema de Grid: Divide la página en una rejilla de 12 columnas, permitiendo adaptar el contenido a cualquier tipo de diseño. Componentes: añade una gran cantidad de elementos de fácil instalación que permiten ampliar los diseños fácilmente: menús desplegables, botones, iconos, ventanas emergentes, cards… Compatibilidad: Bootstrap es compatible con los principales navegadores actuales: Google Chrome Safari Mozilla Firefox Microsoft Edge. No soporta Internet Explorer 9 o anteriores (¡ya era hora!) Opera Sass (o Syntactically Awesome Style Sheets): SASS es un preprocesador de CSS, permitiendo convertir las hojas de estilo en algo dinámico. Podemos crear funciones con código matemático y reutilizar código a través de los mixins, variables que guardan determinados valores que repetiremos en todo nuestro código.   Principales diferencias entre la versión 3 y la 4: https://www.quackit.com/bootstrap/bootstrap_4/differences_between_bootstrap_3_and_bootstrap_4.cfm

Más info

RGPD: 5 tareas para que tu web se adapte al nuevo Reglamento General de Protección de Datos

EU and General Data Protection Regulation - GDPR

Imagino que sí, pero quizás todavía no sepas que el próximo 25 de mayo entra en vigor el nuevo Reglamento General de Protección de Datos. más comúnmente conocido como RGPD y que afectará a las empresas y profesionales que gestionen datos de usuarios miembros de la Unión Europea, especialmente a los que tengan un sitio web con registro de usuarios, compras y demás datos sensibles, relacionados con el Marketing Online. Si ya conoces de que va todo esto del RGPD puedes saltarte este párrafo y continuar leyendo, pero si no sabes de que te estoy hablando, te sugiero que visites este enlace en El Blog de Isidro Pérez, mi segunda casa, en el que te hablo sobre ¿Cómo afectará el nuevo Reglamento General de Protección de Datos a tu sitio web?. 5 tareas imprescindibles para adaptar tu sitio web al nuevo RGPD Lo prometido es deuda, aquí te dejo 5 de las tareas más importantes a realizar, si quieres que tu sitio web se adapte a la nueva normativa de Protección de Datos. Vaya por delante mi recomendación de que revises todo el nuevo reglamento de la mano de especialistas jurídicos en la materia y que te preparen un guión de trabajo que compartirás con la empresa de desarrollo web que selecciones para llevar a cabo dichas tareas. Mientras eliges profesional para ayudarte con estas nuevas normativas, paso a detallarte algunas de las modificaciones que seguro tendrás que aplicar a tu sitio web. Tarea 1. Cambiar los formularios con aceptación automática por manual. Esta tarea consiste básicamente en eliminar todas las aceptaciones automáticas de Aviso Legal y Privacidad de tu sitio web. A partir de ahora, el usuario debe otorgar permiso consciente para que utilices sus datos en tu sitio web y por lo tanto, la casilla de aceptar no puede estar marcada por defecto. Tarea 2. Comunica a tus usuarios que cumples y te sometes al nuevo Reglamento General de Protección de Datos. En este punto, me he estado fijando en como lo hacen empresas como Facebook, Mailchimp y Hotjar para que te hagas una idea de lo que necesitas hacer. Primero: Tendrás que informar a los nuevos usuarios de manera sencilla, sobretodo en formularios, para qué vas a utilizar sus datos y tendrás que incluir un botón con más información que ya te lleve a la Política de Privacidad en formato extendido, debes tener en cuenta que a partir de ahora no se pude utilizar terminología legal complicada, la nueva Política de Privacidad tiene que estar escrita de manera sencilla para que a nuestros clientes les quede muy claro que sucederá con los datos que nos dejan en nuestro sitio web. Segundo: Deberás hacer un comunicado a tus clientes y suscriptores informándoles de todos los cambios que vas a realizar con la adaptación del RGPD. Tarea 3. Indica qué información recoges de los usuarios y quien además de ti tiene acceso a la información que guardes de ellos. Tendrás que dejar muy claro toda la información que registras en tu sitio web: Duración de la visita, páginas visitas, direcciones IPs, email, teléfono, nombre, apellidos, dirección de envío o facturación, cookies, etc… Además tendrás que explicar quién tiene acceso además de ti a la información de tus usuarios. Si trabajas con Google; Hotjar, Facebook, etc… deben quedar reseñados en la información de la Política de Privacidad de tu sitio web. Tarea 4. Especifica la identidad del DPO. El DPO es el responsable de la gestión de los datos personales de tu sitio web, puede ser un profesional externo o alguien de tu empresa, en cualquiera de los dos casos será el máximo responsable del tratamiento de tus datos y de que se cumplan todos los requerimientos. Su nombre y apellidos deberá aperecer de manera visible en el sitio web y a él se dirigirán todas la reclamaciones que realicen los usuarios. Tarea 5. Explícales a los usuarios con detalle sus derechos. Tendrás que hacerles saber, dentro de los cambios que realices en tu web, qué podrán solicitarle a tu DPO todos los datos que hayan facilitado previamente; para su eliminación, limitación o rectificación y por supuesto oponerse al tratamiento, añadiendo a todo esto el derecho al olvido y la portabilidad de los mismos. Lo ideal sería resolverles preguntas del tipo ¿Durante cuanto tiempo y para qué vas a utilizar mis datos? Teniendo en cuenta que lo ideal es que guardes esos datos durante el menor tiempo posible y así reducir el compromiso de integridad de dicha información. Espero que este artículo te haya podido ayudar en el momento de adaptar tu sitio web al Nuevo Reglamento de Protección de Datos y para cualquier cosa que necesites, el equipo de Avanza Soluciones y especialmente el equipo de desarrollo web, estaremos encantados de ayudarte. ¡Nos vemos en próximos artículos!

Más info

Contáctanos
966 27 81 05 info@avanzaeninternet.com
O si lo prefieres
Visítanos
C/ Gabriel Miró 45, 3º I 03420 Castalla (Alicante)
de lunes a jueves de 9:00 a 14:00 h. de 15:00 a 18:00 h.
viernes de 9:00 a 14:00 h.
Nuestras Redes Sociales

Nuestra web utiliza cookies propias y de terceros. Esto es necesario para que puedas disfrutar de la mejor experiencia. Más información.

Los ajustes de cookies de esta web están configurados para "permitir cookies" y así ofrecerte la mejor experiencia de navegación posible. Si sigues utilizando esta web sin cambiar tus ajustes de cookies o haces clic en "Aceptar" estarás dando tu consentimiento a esto.

Cerrar