Como criar uma Lista de Controle de Acesso (ACL) personalizada no Magento 2

Contextualizando

O que é uma lista de controle de acesso?

O Access Control List (Controle de Lista de Acessos) ou ACL são regras que permitem um administrador limitar as permissões de um usuário para autenticação, permitindo o dono da loja refinar as funções para cada papel de usuário.

Papeis de usuário

As listas de recursos do ACL estão na área do administrador do Magento e são visíveis assim que acessar o caminho System -> Permissions -> User Roles. Neste recurso é possível visualizar uma lista em forma de árvore de todos os recursos disponíveis, onde os recursos filhos ficam dentro dos recursos pais.
É possível criar papeis de usuários e selecionar os recursos que cada papel poderá ter acesso, cada usuário ficará limitado aos recursos selecionados do seu papel.

Código para criar o ACL

acl.xml

Para a criação de novos papéis de usuário no Magento é necessário criar um arquivo chamado acl.xml que deve seguir a estrutura de pasta \{Vendor}\{Module}\etc\acl.xml. Todo recurso deve iniciar tendo o recurso Magento_Backend::admin como raiz, caso não seja filho de outro recurso.

Atributo Descrição
id Define o identificador único que é utilizado na guia.
title Texto que será exibido na barra de menu.
sortOrder Define a ordem de classificação dos recursos. A ordem é determinada por números crescente, então números menores aparecerão primeiro.
<?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="{Vendor}_{Module}::{parentResourceId}" title="{Parent Title}" sortOrder="{integer}">
                    <resource id="{Vendor}_{Module}::{featureResourceId}" title="{Feature Title}" sortOrder="{integer}">
                        <resource id="{Vendor}_{Module}::{firstChildResourceId}" title="{First Child Title}" sortOrder="{integer}" />
                        <resource id="{Vendor}_{Module}::{secondChildResourceId}" title="{Second Child Title}" sortOrder="{integer}">
                            <resource id="{Vendor}_{Module}::{firstGrandchildResourceId}" title="{First Grandchild Title}" sortOrder="{integer}" />
                        </resource>
                    </resource>
                </resource>
            </resource>
        </resources>
    </acl>
</config>

Finalizando

Valores entre chaves ({test}) devem ser alterados na implementação do código.

Habilitando as alterações

Execute o comando PHP para limpar todos os caches de armazenamento em cache do processos.

php bin/magento cache:clean
php bin/magento flush

Diretórios e Arquivos

Segue a a lista de diretórios e arquivos que devem ser criados.

- app/
  - code/
    - {Vendor}/
        - {Module}/
          - etc/
            - acl.xml
            - module.xml
          - registration.php
          - composer.json

22