This commit is contained in:
46
api/app/Http/Middleware/Gate.php
Normal file
46
api/app/Http/Middleware/Gate.php
Normal file
@@ -0,0 +1,46 @@
|
||||
<?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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user