Blog

Conoce las últimas novedades sobre todo lo relacionado con el mundo online.

Información útil sobre todo lo que te interesa, desde las mejores herramientas de desarrollo a las últimas tendencias en redes sociales. Si no te enteras es porque no quieres.

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-67000fe666978778109906/] 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-67000fe66697e272073999/]   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-67000fe66698b195057400/]   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-67000fe66698e797190391/] 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-67000fe666990688849009/]   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-67000fe666993100139335/] 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-67000fe666995015753280/]   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

Instagram shopping: cómo conectar tu perfil de empresa a tu ecommerce

instagram shopping

Instagram ha creado una nueva y útil herramienta para los perfiles de empresa llamada Instagram Shopping. Se puede distinguir porque en las publicaciones que utilizan esta herramienta, aparece en la esquina inferior izquiera un icono con una bolsa. En ella existe la posibilidad de etiquetar los productos de una tienda online con el perfil de Instagram. Para lograrlo hacen falta algunos requisitos, muy fáciles de conseguir ¿los quieres saber? Sigue leyendo… Instagram Shopping la nueva herramienta para empresas Para mostraos todos los pasos que deben seguirse y los podáis ver físicamente os voy a enseñar capturas de pantalla de la tienda online de moda La Casita de Bea En primer lugar, cuando se crea el perfil de Instagram, hay que entrar en la configuración y elegir la opción de transformar en perfil de empresa. Este paso es primordial para seguir los siguientes pasos. En segundo lugar, tu comercio debe vender productos físicos. En este momento Instagram shopping no da la opción de vender productos virtuales o servicios de ningún tipo. Cuando tu perfil de Instagram se ha convertido en un perfil de empresa, es necesario que lo conectes con la Fan Page de Facebook asociada a tu tienda online. Una vez se han enlazado el perfil de Instagram y la fan page de Facebook tendrás que tener tu catálogo de productos o bien subido a mano o importándolo desde plataformas como Shopify o Bigcommerce. Es muy importante que los productos del catálogo muestren sus característcas: talla, color, precio y descripción. Además deben tener el enlace al mismo artículo en la tienda online. Otro de los requisitos que se debe cumplir es que en el perfil debe haber como mínimo nueve publicaciones para que se active la herramienta Instagram Shopping. Debes tener instalada en tu smartphone la última actualización de Instagram para que esta funcionalidad se pueda activar. Una vez cumplidos todos estos requisitos, se activará la funcionalidad Instagram Shopping para que puedas etiquetar los productos de tu ecommerce. ¿Te gustaría saber cómo etiquetarlos? Cómo etiquetar productos en Instagram Shopping   Podrás encontrar la opción de etiquetar productos cuando vas a agregar el título y localización cuando subes una fotografía. Te dará la opción de etiquetar el producto en el lugar que más te guste de la fotografía. Cuando crees la etiqueta, te dará la opción de elegir el producto que tú quieras del catálogo de tienda online. Una vez publicada la foto, se verá la etiqueta como un dot (punto) de color en el que podrás hacer click y de desplegará el producto con su precio y características. La herramienta Instagram Shopping es muy útil a la hora de realizar ventas en tu ecommerce porque los usuarios ahorran muchos pasos en su proceso de compra, al tener enlace directo con los productos de la tienda. ¡Te animo a que lo pruebes en tu propio comercio online!

Más info

Fotografía de producto para ecommerce

RELOJES

Todos sabemos el aumento de las tiendas online en los últimos años y la importancia de las ventas para su crecimiento. El producto en sí es la principal atracción para el usuario y nuestra tarea es mostrarlo lo más real y atractivo posible. ¿Cuántas pérdidas habrán por mostrar imágenes de mala calidad y en las que no se refleje la calidad de los artículos? La fotografía de producto de es uno de los factores más importantes a la hora de decidir la compra y el escaparate con el que atraer a nuestros clientes. Sin olvidar que toda la información la recibimos con la vista (el ser humano procesa las imágenes más rápido que el texto) y estamos a un click de que cierren nuestra pestaña. ¿En qué nos ayuda una buena fotografía de producto? Nos ayuda a diferenciarnos de la competencia, a llamar más la atención y a dar profesionalidad a nuestro negocio. Es fundamental en la decisión final de la compra, ya que podemos mostrar el producto con todas sus vistas, posibilidades y usos. Una imagen atractiva tiene más posibilidades de ser compartido en las redes o de llegar al usuario a través de un anuncio. Consejos para no olvidar No seas tacaño: Las fotos de tu producto son el momento perfecto para que le muestres al cliente todo lo que le ofreces. Cuantas más imágenes diferentes de él puedas mostrar, más información le estarás dando para decidirse. Ya sea empaquetado, de frente, de perfil, con detalles, en uso… ¡Que sienta que no le quedan dudas! Ponle en situación: dependiendo del producto, podemos mostrarle cómo quedaría con fotografías en su ambiente. Por ejemplo con la ropa en modelos, muebles o decoración montados en escena, objetos en manos o con personas para ver las dimensiones… Así ayudamos a que se haga una idea de cómo puede quedar. El producto: él es la estrella. Así que cuanto más limpia y sencilla sea la fotografía, más conseguiremos que se centre en él. Fondos neutros, buena iluminación y calidad de imagen para que sea tan real cómo tenerlo en nuestras manos. Profesionalidad: sé consciente de que las fotografías que no muestren la realidad o que la estropeen tendrán un efecto contrario, es mejor invertir en profesionales que realcen los valores de tus productos a perder esos clientes por dudar de los artículos. Cuidar las imágenes en nuestro negocio online es fundamental para generar confianza, cuidar la marca y su difusión y evidentemente, su crecimiento.

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-67000fe66717f601158756/] 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-67000fe667184419424880/] 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-67000fe667187600396902/] 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-67000fe66718a890313335/] 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

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:30 a 14:00 h. de 15:00 a 18:00 h.
viernes de 9:00 a 14:00 h.
Nuestras Redes Sociales