Admin Access Control List (ACL) en Magento2

El sistema de Autenticación de Magento funciona mediante un conjunto de reglas de control de acceso llamadas ACL (Access Control List).

Magento nos permite crear nuestros propios conjuntos de reglas para luego asignarlas mediante Roles a un grupo de Usuarios.

Una vez creado los Roles de Usuario podremos asignar permisos de acceso a los diferentes recursos de Magento.

Los Módulos de Magento usan el fichero webapi.xml del directorio etc/ para poder configurar el acceso a estos recursos.

Todos los Roles y Recursos son visibles desde el Bakend. Para ello tenemos que ir a System > Permissions > User Roles

Crendo nuestras propias Reglas ACL

Para crear reglas personalizadas en nuestros módulos primero necesitamos crear un fichero llamado acl.xml en el directorio etc/

Vamos a crear una serie de reglas en nuestro módulo de blog, veamos como funciona:

Este conjunto de reglas estamos creándolas en el nivel de Content de Magento (Magento_Backend::content).

Ahí incluiremos el conjunto de reglas de acceso a nuestro módulo de Blog. Estas reglas nos permitirán listar, incluir o borrar registros.

Cada Resource podrá tener sus propios Atributos:

  • id: Identificador único del resource. Lo podemos localizar en el fichero menu.xml, en el directorio etc/adminhtml/ de nuestro módulo.  Sino sabes como hacerlo puedes ver como funciona en este Post.

El valor del atributo resource del elemento <add> es el que vamos a usar para definir la nueva regla.

  • title: El nombre del resource que se mostrará en el Backend.
  • sortOrder: Ordenación en el árbol respecto al resource al que pertenece.

Recuerda hacer flush de la caché para ver los cambios:

ACL de Configuración

Para poder configurar las reglas de acceso de Configuración tendremos que localizar el fichero system.xml, en el directorio etc/adminhtml/ de nuestro módulo.

Ahí buscaremos el elemento <resource> que estará declarado dentro del elemento <section …> para comprobar el valor que le hemos dado.

Si hemos seguido el ejemplo correctamente nuestro Resource tiene que estar configurado así:

Para comprobar que funciona podremos crear roles (Almacen, Contabilidad, Marketing, etc …) y asignarlos a un usuario para probar que todo funciona como es debido.

Magento nos proporciona un nivel más de seguridad. Para ello tendremos que usar la clase abstracta Magento\Framework\AuthorizationInterface

Con ella podremos validar el usuario logueado contra uno o varias reglas que tengamos asignadas en nuestro ACL.

Si la queremos usar en nuestros controladores lo haremos de la siguiente forma.

Incluyendo el método _isAllowed() en el controlador de borrado de noticias comprobará las reglas en nuestro ACL y permitirá el acceso si el usuario tiene permisos suficientes.

En caso de no tener permiso nos mostrará el siguiente mensaje:

De esta manera podremos incluir nuevas reglas para edición, borrado masivo, etc … y evitamos el tener que ocultar enlaces o campos al usuario ya que es una tarea más tediosa.

Deja una respuesta

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.