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); } }