El panel de ACL de administración de Magento 2 utiliza un sistema de autenticación y un sólido sistema para crear Reglas de Lista de Control de Acceso (ACL), que permite al propietario de una tienda crear roles detallados para cada usuario en su sistema. En este artículo, aprenderemos cómo funciona y cómo agregar ACL para nuestro módulo personalizado.
Las Reglas de Lista de Control de Acceso de Magento 2 son visibles en el área de Roles de Usuario en el administrador de Magento 2 bajo System > Permissions > User Roles. Cuando hacemos clic en el botón Agregar Nuevo Rol o accedemos a un rol existente, (Role Resource) veremos la página con la siguiente apariencia:
En esta pestaña de recursos, puedes ver una lista jerárquica de todos los recursos disponibles en tu sistema. Puedes seleccionar todos los recursos o algunos de ellos para este rol y luego elegir los usuarios para este rol en la pestaña "User Roles". Todos los usuarios que pertenezcan a este rol tendrán un acceso limitado a los recursos que elijas. No podrán ver ni acceder a otros recursos.
Crear una regla de ACL
Ahora veremos cómo agregar nuestro módulo a un rol de ACL. Utilizaremos un módulo basico llamado Blog para hacer esto. Como viste en el artículo del Menú de Administración y Configuración del Sistema, siempre tenemos un atributo "resource" cuando lo creamos. Ahora registraremos esos recursos en el sistema, de modo que Magento pueda reconocerlos y permitirnos establecer un rol para ellos. Para registrar el recurso, utilizaremos el archivo acl.xml que se encuentra en app/code/{vendor}/{module}/etc/acl.xml. Creemos este archivo para nuestro simple módulo:
app/code/Actecnology/Blog/etc/acl.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Acl/etc/acl.xsd">
<acl>
<resources>
<resource id="Magento_Backend::admin">
<resource id="Magento_Blog::blog" title="AC Tecnology - Blog">
<resource id="Actecnology_Blog::actecnology_blog" title="Manage Posts" sortOrder="10">
<resource id="Actecnology_Blog::blog" title="Blog" sortOrder="10"/>
</resource>
</resource>
</resource>
</resources>
</acl>
</config>
Nuestro recurso se colocará como hijo de Magento_Backend::admin. Cada recurso tendrá los atributos Id, title y sortOrder:
• El atributo Id es la identificación de este recurso. Puedes usarlo al definir el recurso en el menú de administración, la configuración y para limitar el acceso a los controladores de tu módulo. Es una cadena única y debe estar en el siguiente formato: Vendor_ModuleName::nombre_del_recurso.
• El atributo Title es la etiqueta de este recurso cuando se muestra en el árbol de recursos.
• El atributo sortOrder define la posición de este recurso en el árbol.
Una vez hecho esto, actualiza la caché y observa el resultado en el árbol de recursos.
php bin/magento cache:clean
Verificar la regla de ACL
Existen algunos lugares donde colocamos el recurso de ACL para limitar el acceso:
Menú de administración: Colocamos el recurso de ACL para ocultar el menú si no está permitido por el propietario de la tienda.
Archivo: app/code/Actecnology/Blog/etc/adminhtml/menu.xml
<add id="Actecnology_Blog::blog" title="Blog" module="Actecnology_Blog" sortOrder="51" resource="Actecnology_Blog::blog"/>
Configuración del sistema: Colocamos el recurso de ACL para limitar el acceso a una sección de la página.
Archivo: app/code/Actecnology/Blog/etc/adminhtml/system.xml
<section id="blog" translate="label" sortOrder="130" showInDefault="1" showInWebsite="1" showInStore="1">
….
<resource>Actecnology_Blog::blog_configuration</resource>
….
</section>
En el controlador.
En controladores de administración: Magento proporciona un tipo abstracto Magento\Framework\AuthorizationInterface que puedes utilizar para validar el usuario que ha iniciado sesión en función de un ACL específico. Puedes llamar a ese objeto utilizando la variable: $this->_authorization. En el controlador, debes escribir una función protegida para verificar el recurso:
Ejemplo: Archivo: app/code/Actecnology/Blog/Controller/Adminhtml/Post/Index.php
protected function _isAllowed()
{
return $this->_authorization->isAllowed('Actecnology_Blog::blog');
}
mas información en DevDocs.
En este Post aprenderemos a personalizar la tienda Magento 2. Descubre cómo incorporar JavaScript personalizado para mejorar la funcionalidad y ...
Leer más...Current version of RDBMS is not supported. Used Version: 10.6.17-MariaDB-1:10.6.17+maria~ubu2004. Supported versions: MySQL-8, MySQL-5....
Leer más...Los principales motivos para aprenderLa motivación es uno de los pilares fundamentales en el proceso de aprendizaje del desarrollo web....
Leer más...✨ Dominando el Estilo: Un Viaje al Mundo de CSSEn el universo del desarrollo web, CSS (Cascading Style Sheets) desempeña un papel funda...
Leer más...