47 lines
1.8 KiB
PHP
47 lines
1.8 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Middleware;
|
|
|
|
use App\Models\Administracao\Permissao;
|
|
use App\Models\Cadastro\SujeitoAtencao\Lotacao;
|
|
use Closure;
|
|
use Exception;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Support\Facades\Gate as BaseGate;
|
|
|
|
class Gate
|
|
{
|
|
public function handle(Request $request, Closure $next)
|
|
{
|
|
try {
|
|
DB::table('administracao_endpoint_acao')
|
|
->select(
|
|
'administracao_permissao.id',
|
|
'administracao_modulo.identificador as modulo_identificador',
|
|
'administracao_funcionalidade.identificador as funcionalidade_identificador',
|
|
'administracao_endpoint_acao.nome as acao_nome',
|
|
)
|
|
->join('administracao_permissao', 'administracao_permissao.id', 'administracao_endpoint_acao.permissao_id')
|
|
->join('administracao_funcionalidade', 'administracao_funcionalidade.id', 'administracao_permissao.funcionalidade_id')
|
|
->join('administracao_modulo', 'administracao_modulo.id', 'administracao_funcionalidade.modulo_id')
|
|
->get()
|
|
->each(function($permissao) {
|
|
$gateName = "{$permissao->acao_nome}-{$permissao->modulo_identificador}-{$permissao->funcionalidade_identificador}";
|
|
|
|
BaseGate::define($gateName, function () use ($permissao) {
|
|
|
|
$lotacao = Lotacao::find(auth()->payload()->get('lotacao_id'));
|
|
|
|
return $lotacao->hasPermissao(Permissao::find($permissao->id));
|
|
});
|
|
});
|
|
}
|
|
catch (Exception $error) {
|
|
// TODO: Verificar qual exception é lançada e fazer o tratamento dos erros.
|
|
}
|
|
|
|
return $next($request);
|
|
}
|
|
}
|