PHPackages                             resultsystems/acl - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. resultsystems/acl

AbandonedArchivedLibrary

resultsystems/acl
=================

Access Control List (ACL) Solution for Laravel 5.1/Laravel 5.2

0.3.0(10y ago)12200MITPHPPHP &gt;=5.5.9

Since Feb 10Pushed 8y ago4 watchersCompare

[ Source](https://github.com/resultsystems/acl)[ Packagist](https://packagist.org/packages/resultsystems/acl)[ RSS](/packages/resultsystems-acl/feed)WikiDiscussions master Synced 2mo ago

READMEChangelogDependencies (2)Versions (8)Used By (0)

Há formas melhores e mais simples de fazer o mesmo, pacote abandonado!
======================================================================

[](#há-formas-melhores-e-mais-simples-de-fazer-o-mesmo-pacote-abandonado)

ResultSystems ACL
=================

[](#resultsystems-acl)

ACL é um package ACL para Laravel 5 que utiliza filial, grupos e permissões. Este projeto tem como objetivo prover o controle de acesso da sua aplicação. Foi desenvolvido pensando em multi-empresa/filiais.

Instalação
----------

[](#instalação)

ACL pode ser instalado através do composer. Para que o package seja adicionado automaticamente ao seu arquivo composer.json execute o seguinte comando:

```
composer require resultsystems/acl

```

ou se preferir, adicione o seguinte trecho manualmente:

```
{
    "require": {
        "resultsystems/acl": "~0.3"
    }
}
composer update

```

2. Provider
-----------

[](#2-provider)

Para usar o ACL em sua aplicação Laravel, é necessário registrar o package no seu arquivo config/app.php. Adicione o seguinte código no fim da seção providers

```
// inicio do arquivo foi omitido
    'providers' => [
        //Outras entradas omitidas
        ResultSystems\Acl\AclServiceProvider::class, //Laravel 5.1 em diante
    ],
// fim do arquivo foi omitido

```

3. User Class
-------------

[](#3-user-class)

Na sua classe de usuário, adicione a trait `ResultSystems\Acl\Traits\PermissionTrait` para disponibilizar os métodos para checagem de permissões:

4. Publicando o arquivo de configuração e as migrations
-------------------------------------------------------

[](#4-publicando-o-arquivo-de-configuração-e-as-migrations)

Para publicar o arquivo de configuração padrão e as migrations que acompanham o package, execute o seguinte comando:

```
php artisan vendor:publish --provider="ResultSystems\Acl\AclServiceProvider"

```

Execute as migrations, para que sejam criadas as tabelas no banco de dados:

php artisan migrate

5. Middleware do ACL
--------------------

[](#5-middleware-do-acl)

Caso você tenha a necessidade de realizar o controle de acesso diretamente nas rotas, o ACL possui um middleware (nativos) que abordam os casos mais comuns. Para utilizá-los é necessário registrá-los no seu arquivo app/Http/Kernel.php.

### Laravel 5.1

[](#laravel-51)

```
protected $routeMiddleware = [
    'auth'            => 'App\Http\Middleware\Authenticate',
    'auth.basic'      => 'Illuminate\Auth\Middleware\AuthenticateWithBasicAuth',
    'guest'           => 'App\Http\Middleware\RedirectIfAuthenticated',

    // Controle de acesso usando permissões
    'needsPermission' => \ResultSystems\Acl\Middlewares\NeedsPermissionMiddleware::class,
];

```

### Laravel 5.2

[](#laravel-52)

```

protected $routeMiddleware = [
        'web' => [
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            \Illuminate\Session\Middleware\StartSession::class,
            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
            \App\Http\Middleware\VerifyCsrfToken::class,
            // Controle de acesso usando permissões para WEB
            'needsPermission' => \ResultSystems\Acl\Middlewares\NeedsPermissionMiddleware::class,
        ],
        'api' => [
            'throttle:60,1',
            // Controle de acesso usando permissões para API
            'needsPermission' => \ResultSystems\Acl\Middlewares\NeedsPermissionMiddleware::class,
        ],

];

```

Usando o ACL
------------

[](#usando-o-acl)

Configure o arquivo `config/acl.php`

A utilização desses middlewares é explicada na próxima seção.

\#Como usar nas rotas

```
Route::post('/users', ['middleware' => ['auth', 'needsPermission'],
    'permission'               => ['user.read', 'user.create'],
    'any'                      => false, //usuário precisará ter as duas permissões
    /**
     * Caso a configuração em `config/acl.php`
     * middleware->autoload for true,
     * você poderá omitir a informação da owner_id
     */
     'owner_id'                => 'middleware', /*
    function () {
        dd('Tenho permissão');
    }]);

```

```
Route::post('/users', ['middleware' => ['auth', 'needsPermission'],
    'permission'               => ['user.read', 'user.create'],
    'any'                      => false, //usuário precisará ter as duas permissões
    'owner_id'                => 1, // Empresa/filial *
    function () {
        dd('Tenho permissão');
    }]);

```

```
Route::get('/users', [
    'middleware' => ['auth', 'needsPermission:user.read|user.create,true,5'],

    function () {
        dd('Tenho permissão');
    }]);

    //needsPermission=middleware
    //user.read=permissão user.read
    //user.create=permissão user.create
    //any=true Usuário pode ter qualquer das permissões informadas
    //5=Filial/Empresa

```

Usando com a middleware com busca automática
--------------------------------------------

[](#usando-com-a-middleware-com-busca-automática)

```
Route::post('/users', ['middleware' => ['auth', 'needsPermission'],
    'permission'               => ['user.read', 'user.create'],
    'any'                      => false, //usuário precisará ter as duas permissões
    'owner_id'                => 'middleware', //*
    function () {
        dd('Tenho permissão');
    }]);

```

- Se não for passado um :id ou 'middleware' e nem estiver configurado para pegar o owner\_id via middlware será buscado apenas permissões com owner\_id nulo

\#Usar em qualquer lugar com o Auth

Você pode usar em qualquer lugar que o usuário esteja autenticado, usando o Auth.

Exemplos:

```
if (Auth::user()->hasPermission('user.create')) {
    echo 'tenho permissão';
}

if (Auth::user()->hasPermissions(['user.create', 'user.update'])) {
    echo 'tenho pelo menos uma das permissões';
}

if (Auth::user()->hasPermissions(['user.create', 'user.update'], false)) {
    echo 'tenho ambas as permissões';
}

if (Auth::user()->hasPermissions(['user.create', 'user.update'], false, 1)) {
    echo 'tenho ambas as permissões na filial 1';
}

if (Auth::user()->hasPermissions(['user.create', 'user.update'], true, 1)) {
    echo 'tenho pelo menos uma das permissões na filial 1';
}

```

### config/acl.php

[](#configaclphp)

```
return [
    //Informe a tabela de usuário aqui
    'tables' => [
        'user' => 'users',
    ],

    //Informe o model usuado que conecta a tabela de usuário
    'model' => \App\User::class,

    /**
     * Informe a class que negará acesso
     * caso usuário não tenha permissão
     * você pode criar uma personalizada,
     * porem precisa estender esta.
     */
    'forbidden_callback' => ResultSystems\Acl\Handlers\ForbiddenHandler::class,
    /**
     * Middleware para pegar a filial automaticamente
     * para você não precisar informar na rota ou no controler
     */
    'middleware' => [
        //Auto carrega o middleware em todas as rotas
        'autoload' => false, //Auto load middleware in all reques

        // Middleware utilizado para compatibilidade com o `Auth` do Laravel
        'owner'   => ResultSystems\Acl\Middlewares\AuthOwnerMiddleware::class,

        // Middleware utilizado para compatibilidade com o `Jwt`
        // mais informações https://github.com/tymondesigns/jwt-auth
        //'owner'    => ResultSystems\Acl\Middlewares\JwtOwnerMiddleware::class,

        /**
         * Campo no Auth::user()
         * ou no JWT (Neste caso campo adicional)
         * que representa a filial/owner atual
         */
        'owner_id' => 'owner_id',
    ],
];

```

###  Health Score

27

—

LowBetter than 49% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity17

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity53

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~16 days

Total

7

Last Release

3653d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/191396?v=4)[Leandro Henrique Reis](/maintainers/emtudo)[@emtudo](https://github.com/emtudo)

---

Top Contributors

[![emtudo](https://avatars.githubusercontent.com/u/191396?v=4)](https://github.com/emtudo "emtudo (4 commits)")

---

Tags

acllaravel

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/resultsystems-acl/health.svg)

```
[![Health](https://phpackages.com/badges/resultsystems-acl/health.svg)](https://phpackages.com/packages/resultsystems-acl)
```

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
