PHPackages                             jquembi/rule-manager - 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. jquembi/rule-manager

ActiveLibrary

jquembi/rule-manager
====================

Sistema de gestão de papéis e permissões (RBAC) para Laravel, com módulo corporativo/premium de sugestão e otimização de permissões. Pensado para pequenas empresas e grupos corporativos em Angola (multi-empresa, NIF, conformidade com a Lei n.º 22/11).

02PHP

Since Jul 11Pushed 1mo agoCompare

[ Source](https://github.com/jquembi/Rule_Manager)[ Packagist](https://packagist.org/packages/jquembi/rule-manager)[ RSS](/packages/jquembi-rule-manager/feed)WikiDiscussions main Synced 1w ago

READMEChangelogDependenciesVersions (1)Used By (0)

RULE\_MANAGER 🇦🇴
================

[](#rule_manager-)

Sistema de gestão de **papéis e permissões (RBAC)** para Laravel — construído para cobrir desde o pequeno negócio até ao grupo corporativo, com um módulo **Premium** de sugestão e otimização automática de permissões.

Feito com o contexto angolano em mente: suporte multi-empresa/filiais (grupos económicos), validação de NIF (AGT), e nomenclatura em português.

---

Índice
------

[](#índice)

- [Instalação](#instala%C3%A7%C3%A3o)
- [Planos](#planos)
- [Uso básico](#uso-b%C3%A1sico)
- [Multi-empresa](#multi-empresa-corporativo)
- [Middlewares e Blade](#middlewares-e-blade)
- [Comandos Artisan](#comandos-artisan)
- [Módulo Premium — Motor de Sugestão e Otimização](#m%C3%B3dulo-premium--motor-de-sugest%C3%A3o-e-otimiza%C3%A7%C3%A3o)
- [Auditoria](#auditoria)

---

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

[](#instalação)

```
composer require jquembi/rule-manager
```

Publicar a configuração e correr as migrações:

```
php artisan vendor:publish --tag=rule-manager-config
php artisan migrate
```

Adicionar o trait ao seu model de utilizador:

```
use RuleManager\Traits\HasRoles;

class User extends Authenticatable
{
    use HasRoles;
}
```

---

Planos
------

[](#planos)

O pacote funciona igual tecnicamente em qualquer plano — a diferença é apenas quais funcionalidades fazem sentido ativar em `config/rule-manager.php`:

PlanoIndicado paraFuncionalidades`basico`Pequenos negócios, 1 empresaPapéis, permissões, middleware, diretivas Blade`corporativo`Grupos com filiais+ Multi-empresa, hierarquia de papéis, auditoria`premium`Empresas com muitos utilizadores/papéis+ Motor de sugestão e otimização de permissões```
// config/rule-manager.php
'plano' => env('RULE_MANAGER_PLANO', 'basico'),
```

---

Uso básico
----------

[](#uso-básico)

```
use RuleManager\Models\Role;
use RuleManager\Models\Permission;

// Criar permissões
Permission::create(['nome' => 'Criar Faturas', 'modulo' => 'Financeiro']); // slug: criar.faturas

// Criar papel e atribuir permissões
$gestor = Role::create(['nome' => 'Gestor Financeiro']);
$gestor->darPermissao('criar.faturas', 'ver.faturas');

// Atribuir papel a um utilizador
$utilizador->atribuirPapel('gestor.financeiro');

// Verificar
$utilizador->temPermissao('criar.faturas'); // true
$utilizador->temPapel('gestor.financeiro');  // true

// Permissão pontual, sem papel (útil em negócios pequenos)
$utilizador->darPermissaoDireta('exportar.faturas');
```

---

Multi-empresa (corporativo)
---------------------------

[](#multi-empresa-corporativo)

Para grupos económicos com holding e filiais:

```
use RuleManager\Models\Empresa;

$holding = Empresa::create(['nome' => 'Grupo XYZ, Lda', 'nif' => '5417123456']);

$filial = Empresa::create([
    'nome' => 'XYZ Comercial, Lda',
    'nif' => '5417987654',
    'empresa_mae_id' => $holding->id,
    'provincia' => 'Luanda',
]);

// Papéis podem ser específicos de uma empresa/filial
$gestorFilial = Role::create(['nome' => 'Gestor de Loja', 'empresa_id' => $filial->id]);
```

`Empresa::nifEhValido($nif)` valida o formato do NIF (pessoa coletiva ou singular) segundo os padrões da AGT.

---

Middlewares e Blade
-------------------

[](#middlewares-e-blade)

```
// routes/web.php
Route::middleware('permissao:faturas.criar')->group(function () {
    // ...
});

Route::middleware('papel:administrador|gestor.financeiro')->group(function () {
    // ...
});
```

```
@temPermissao('faturas.criar')
    Nova Fatura
@endtemPermissao

@temPapel('administrador')
    Painel de Administração
@endtemPapel
```

---

Comandos Artisan
----------------

[](#comandos-artisan)

```
# Criar permissão
php artisan rule-manager:criar-permissao "Criar Faturas" --modulo=Financeiro

# Criar papel
php artisan rule-manager:criar-papel "Gestor Financeiro"

# Instalar um pacote padrão de papéis/permissões (Financeiro, RH, Vendas, Stock...)
php artisan rule-manager:instalar-padrao
```

---

Módulo Premium — Motor de Sugestão e Otimização
-----------------------------------------------

[](#módulo-premium--motor-de-sugestão-e-otimização)

Ative no `.env`:

```
RULE_MANAGER_PLANO=premium

```

O motor (`PermissionOptimizerService`) analisa a matriz de papéis/permissões e o histórico de auditoria e devolve **5 tipos de sugestão**:

1. **Fusão de papéis** — papéis com similaridade de Jaccard ≥ 80% (configurável) entre os seus conjuntos de permissões.
2. **Agrupamento de permissões** — permissões que aparecem quase sempre juntas nos papéis (co-ocorrência ≥ 90%).
3. **Permissões concedidas e não usadas** — cruza atribuições com o log de auditoria; sinaliza o que não foi exercido nos últimos N dias (princípio do menor privilégio).
4. **Papéis órfãos** — papéis sem nenhum utilizador atribuído.
5. **Novos papéis sugeridos** — agrupa utilizadores por assinatura real de permissões; se ≥ N utilizadores partilham exatamente o mesmo conjunto sem um papel único que os cubra, sugere consolidar num novo papel.

### Via Artisan

[](#via-artisan)

```
php artisan rule-manager:otimizar
php artisan rule-manager:otimizar --json
php artisan rule-manager:otimizar --empresa=3
```

### Via código (Facade ou injeção de dependência)

[](#via-código-facade-ou-injeção-de-dependência)

```
use RuleManager\Facades\RuleManager;

$relatorio = RuleManager::gerarRelatorioCompleto();

// ou apenas uma análise específica
$fusoes = RuleManager::sugerirFusaoDePapeis();
```

Exemplo de saída de `sugerirFusaoDePapeis()`:

```
[
    [
        'papel_a' => 'gestor.financeiro',
        'papel_b' => 'contabilista.senior',
        'similaridade' => 0.86,
        'recomendacao' => 'Os papéis "Gestor Financeiro" e "Contabilista Sénior" partilham 86% das permissões. Considere fundi-los num único papel.',
    ],
]
```

Os limiares são ajustáveis em `config/rule-manager.php` → `otimizacao`.

---

Auditoria
---------

[](#auditoria)

Toda atribuição/revogação de papel e permissão, e toda verificação de acesso (`temPermissao()`), fica registada em `permission_audit_logs`. Esse histórico alimenta diretamente o item 3 do motor de otimização (permissões não usadas).

```
'auditoria' => [
    'ativo' => true,
    'reter_dias' => 365,
],
```

---

Licença
-------

[](#licença)

MIT.

###  Health Score

20

—

LowBetter than 12% of packages

Maintenance59

Moderate activity, may be stable

Popularity3

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity11

Early-stage or recently created project

 Bus Factor1

Top contributor holds 66.7% 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.

### Community

Maintainers

![](https://www.gravatar.com/avatar/cca65e53909a62147ec68acd40e718c84392432a73c45ceef65407568c262732?d=identicon)[jquembi](/maintainers/jquembi)

---

Top Contributors

[![jquembi](https://avatars.githubusercontent.com/u/269573441?v=4)](https://github.com/jquembi "jquembi (2 commits)")[![JoseQuembi1](https://avatars.githubusercontent.com/u/210159112?v=4)](https://github.com/JoseQuembi1 "JoseQuembi1 (1 commits)")

### Embed Badge

![Health badge](/badges/jquembi-rule-manager/health.svg)

```
[![Health](https://phpackages.com/badges/jquembi-rule-manager/health.svg)](https://phpackages.com/packages/jquembi-rule-manager)
```

PHPackages © 2026

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