jquembi/rule-manager 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

jquembi/rule-manager

Composer 安装命令:

composer require 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).

README 文档

README

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

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

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

Plano Indicado para Funcionalidades
basico Pequenos negócios, 1 empresa Papé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

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)

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

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

Route::middleware('papel:administrador|gestor.financeiro')->group(function () {
    // ...
});
@temPermissao('faturas.criar')
    <button>Nova Fatura</button>
@endtemPermissao

@temPapel('administrador')
    <a href="/admin">Painel de Administração</a>
@endtemPapel

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

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

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)

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.phpotimizacao.

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

MIT.

统计信息

  • 总下载量: 0
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 0
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2026-07-11

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固