This commit is contained in:
@@ -0,0 +1,379 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Administracao;
|
||||
|
||||
use App\Enums\Intranet\Sistema;
|
||||
use App\Enums\Log\AcessoSistemaStatus;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Requests\Autenticacao\RecuperacaoSenhaRequest;
|
||||
use App\Http\Requests\Autenticacao\TrocaSenhaRequest;
|
||||
use App\Mail\UsuarioLogin;
|
||||
use App\Models\Administracao\Menu;
|
||||
use App\Models\Cadastro\Estabelecimento\CentroCusto;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Lotacao;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Usuario;
|
||||
use App\Models\Cadastro\SujeitoAtencao\UsuarioHistoricoAcesso;
|
||||
use App\Models\Geral\Configuracao;
|
||||
use App\Models\Intranet\Cliente;
|
||||
use App\Models\Log\AcessoSistema;
|
||||
use App\Services\Administracao\NotificacaoService;
|
||||
use App\Services\Intranet\Cadastro\NotaVersaoService;
|
||||
use App\Utils\Email;
|
||||
use App\Utils\Senha;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Http\Response;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
|
||||
class AutenticacaoController extends Controller
|
||||
{
|
||||
public function login()
|
||||
{
|
||||
$cliente = Cliente::where('sistema_id', Sistema::CONECTASUS)
|
||||
->where('link', request()->header('customer'))
|
||||
->first();
|
||||
|
||||
if (!is_null($cliente) && $cliente->ativo === false) {
|
||||
return response()->json(['message' => 'O cliente está com o status inativo.'], Response::HTTP_UNAUTHORIZED);
|
||||
}
|
||||
|
||||
$credentials = request(['usuario', 'senha']);
|
||||
|
||||
$usuario = Usuario::where('usuario', $credentials['usuario'])
|
||||
->first();
|
||||
|
||||
if (is_null($usuario)) {
|
||||
|
||||
return response()->json(['message' => 'Usuário e/ou senha incorreto(s).'], Response::HTTP_UNAUTHORIZED);
|
||||
}
|
||||
|
||||
if ($usuario->bloqueado) {
|
||||
AcessoSistema::create([
|
||||
'usuario_id' => $usuario->id,
|
||||
'status_id' => AcessoSistemaStatus::USUARIO_BLOQUEADO,
|
||||
]);
|
||||
|
||||
return response()->json(['message' => 'Usuário bloqueado e sem acesso ao sistema.'], Response::HTTP_UNAUTHORIZED);
|
||||
}
|
||||
|
||||
if (!Hash::check($credentials['senha'], $usuario->senha)) {
|
||||
$configuracao = Configuracao::first();
|
||||
|
||||
$usuarioHistoricoAcesso = UsuarioHistoricoAcesso::where('usuario_id', $usuario->id)
|
||||
->where('ativo', true)
|
||||
->orderBy('created_at', 'desc')
|
||||
->take($configuracao->maximo_tentativa_login - 1)
|
||||
->get();
|
||||
|
||||
if ($usuarioHistoricoAcesso->count() === ($configuracao->maximo_tentativa_login - 1)
|
||||
&& $usuarioHistoricoAcesso->contains('sucesso', true) === false) {
|
||||
$usuario->update(['bloqueado' => true]);
|
||||
}
|
||||
|
||||
UsuarioHistoricoAcesso::create(
|
||||
[
|
||||
'usuario_id' => $usuario->id,
|
||||
'sucesso' => false
|
||||
]
|
||||
);
|
||||
|
||||
AcessoSistema::create([
|
||||
'usuario_id' => $usuario->id,
|
||||
'status_id' => AcessoSistemaStatus::USUARIO_E_OU_SENHA_INCORRETOS,
|
||||
]);
|
||||
|
||||
return response()->json(['message' => 'Usuário e/ou senha incorreto(s).'], Response::HTTP_UNAUTHORIZED);
|
||||
}
|
||||
|
||||
UsuarioHistoricoAcesso::create(
|
||||
[
|
||||
'usuario_id' => $usuario->id,
|
||||
'sucesso' => true,
|
||||
'ativo' => false,
|
||||
]
|
||||
);
|
||||
|
||||
UsuarioHistoricoAcesso::where('usuario_id', $usuario->id)->update(['ativo' => false]);
|
||||
|
||||
AcessoSistema::create([
|
||||
'usuario_id' => $usuario->id,
|
||||
'status_id' => AcessoSistemaStatus::ACESSO_REALIZADO_COM_SUCESSO,
|
||||
]);
|
||||
|
||||
$token = auth()->login($usuario);
|
||||
|
||||
$usuario = auth()->user()->load([
|
||||
'lotacoes' => fn ($q) => $q->where('ativo', true),
|
||||
'lotacoes.infraestrutura.unidade',
|
||||
'lotacoes.ocupacao',
|
||||
]);
|
||||
|
||||
$lotacoes = $usuario->lotacoes->sortBy('infraestrutura.unidade.nome_fantasia')->values()
|
||||
->map(function($lotacao) {
|
||||
$centrosCusto = $lotacao->centrosCusto->sortBy('setor.nome')->values()->toArray();
|
||||
|
||||
if (empty($centrosCusto)) {
|
||||
$centrosCusto = $lotacao->infraestrutura->centrosCusto->sortBy('setor.nome')->values()->toArray();
|
||||
}
|
||||
|
||||
$lotacao = $lotacao->toArray();
|
||||
|
||||
$lotacao['infraestrutura']['centrosCusto'] = $centrosCusto;
|
||||
|
||||
return $lotacao;
|
||||
})
|
||||
->toArray();
|
||||
|
||||
$usuario = $usuario->toArray();
|
||||
|
||||
$usuario['lotacoes'] = $lotacoes;
|
||||
|
||||
$response = [
|
||||
'expiration' => time() + 60 * auth()->factory()->getTTL(),
|
||||
'token' => $token,
|
||||
'usuario' => $usuario,
|
||||
];
|
||||
|
||||
return response()->json($response, Response::HTTP_OK);
|
||||
}
|
||||
|
||||
public function logout()
|
||||
{
|
||||
auth()->logout();
|
||||
|
||||
return response()->json(['message' => 'Successfully logged out']);
|
||||
}
|
||||
|
||||
public function refresh()
|
||||
{
|
||||
$usuario = auth()->user();
|
||||
|
||||
if ($usuario->troca_senha) {
|
||||
return response()->json(['error' => 'Você deve alterar sua senha antes de prosseguir.'], Response::HTTP_UNAUTHORIZED);
|
||||
}
|
||||
|
||||
$lotacao = Lotacao::with(['usuario', 'ocupacao', 'papeis.permissoes.funcionalidade.modulo', 'permissoes.funcionalidade.modulo'])
|
||||
->where('id', request()->lotacao_id)
|
||||
->where('ativo', true)
|
||||
->firstOrFail();
|
||||
|
||||
$centroCusto = CentroCusto::with(['setor', 'salas'])->findOrFail(request()->centro_custo_id);
|
||||
$cliente = Cliente::with(['municipio.estado'])->where('link', app('config')->get('database.default'))->firstOrFail();
|
||||
|
||||
$token = auth()->claims([
|
||||
'lotacao_id' => $lotacao->id,
|
||||
'centro_custo_id' => $centroCusto->id,
|
||||
'unidade_id' => $centroCusto->infraestrutura->unidade_id,
|
||||
'infraestrutura_id' => $centroCusto->infraestrutura_id,
|
||||
]);
|
||||
|
||||
$permissoes = collect();
|
||||
|
||||
foreach ($lotacao->papeis as $papel) {
|
||||
foreach ($papel->permissoes as $permissao) {
|
||||
$permissoes->push($permissao);
|
||||
}
|
||||
}
|
||||
|
||||
$permissoes = $permissoes->merge($lotacao->permissoes);
|
||||
|
||||
$menu = Menu::whereHas('menu.funcionalidade.permissoes.lotacoes', function($query) use ($lotacao) {
|
||||
$query->where('lotacao_id', $lotacao->id);
|
||||
})
|
||||
->orWhereHas('menu.funcionalidade.permissoes.papeis.lotacoes', function($query) use ($lotacao) {
|
||||
$query->where('lotacao_id', $lotacao->id);
|
||||
})
|
||||
->orWhereHas('menu', function($query) use ($lotacao) {
|
||||
$query->whereNull('funcionalidade_id')
|
||||
->where(function($query) use ($lotacao) {
|
||||
$query->whereHas('menu.funcionalidade.permissoes.lotacoes', function($query) use ($lotacao) {
|
||||
$query->where('lotacao_id', $lotacao->id);
|
||||
})
|
||||
->orWhereHas('menu.funcionalidade.permissoes.papeis.lotacoes', function($query) use ($lotacao) {
|
||||
$query->where('lotacao_id', $lotacao->id);
|
||||
})
|
||||
->orWhereHas('menu', function($query) use ($lotacao) {
|
||||
$query->whereNull('funcionalidade_id')
|
||||
->where(function($query) use ($lotacao) {
|
||||
$query->whereHas('menu.funcionalidade.permissoes.lotacoes', function($query) use ($lotacao) {
|
||||
$query->where('lotacao_id', $lotacao->id);
|
||||
})
|
||||
->orWhereHas('menu.funcionalidade.permissoes.papeis.lotacoes', function($query) use ($lotacao) {
|
||||
$query->where('lotacao_id', $lotacao->id);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
})
|
||||
->orWhereHas('funcionalidade.permissoes.lotacoes', function($query) use ($lotacao) {
|
||||
$query->where('lotacao_id', $lotacao->id);
|
||||
})
|
||||
->orWhereHas('funcionalidade.permissoes.papeis.lotacoes', function($query) use ($lotacao) {
|
||||
$query->where('lotacao_id', $lotacao->id);
|
||||
})
|
||||
->orderBy('nome')
|
||||
->get();
|
||||
|
||||
$menuIds = $menu->pluck('menu_id')->filter()->unique();
|
||||
|
||||
while ($menuIds->isNotEmpty()) {
|
||||
$menusPais = Menu::whereIn('id', $menuIds)->get();
|
||||
$menu = $menu->merge($menusPais);
|
||||
$menuIds = $menusPais->pluck('menu_id')->filter()->unique()->diff($menu->pluck('id'));
|
||||
}
|
||||
|
||||
|
||||
$usuario = auth()->user()->load([
|
||||
'lotacoes' => fn ($q) => $q->where('ativo', true),
|
||||
'lotacoes.infraestrutura.unidade',
|
||||
'lotacoes.ocupacao',
|
||||
]);
|
||||
|
||||
$lotacoes = $usuario->lotacoes->sortBy('infraestrutura.unidade.nome_fantasia')
|
||||
->values()
|
||||
->map(function($lotacao) {
|
||||
$centrosCusto = $lotacao->centrosCusto->sortBy('setor.nome')->values()->toArray();
|
||||
|
||||
if (empty($centrosCusto)) {
|
||||
$centrosCusto = $lotacao->infraestrutura->centrosCusto->sortBy('setor.nome')->values()->toArray();
|
||||
}
|
||||
|
||||
$lotacao = $lotacao->toArray();
|
||||
|
||||
$lotacao['infraestrutura']['centrosCusto'] = $centrosCusto;
|
||||
|
||||
return $lotacao;
|
||||
})
|
||||
->toArray();
|
||||
|
||||
$usuario = $usuario->toArray();
|
||||
|
||||
$usuario['lotacoes'] = $lotacoes;
|
||||
|
||||
return response()->json([
|
||||
'expiration' => time() + 60 * auth()->factory()->getTTL(),
|
||||
'lotacao' => $lotacao->load('infraestrutura.unidade')->unsetRelation('papeis')->unsetRelation('permissoes'),
|
||||
'centro_custo' => $centroCusto,
|
||||
'menu' => $this->buildTreeMenu($menu),
|
||||
'token' => $token->refresh(),
|
||||
'usuario' => $usuario,
|
||||
'cliente' => [
|
||||
'municipio' => [
|
||||
'estado' => [
|
||||
'id' => $cliente->municipio->estado->id,
|
||||
'uf' => $cliente->municipio->estado->uf,
|
||||
'nome' => $cliente->municipio->estado->nome,
|
||||
],
|
||||
'id' => $cliente->municipio->id,
|
||||
'nome' => $cliente->municipio->nome,
|
||||
],
|
||||
'nome' => $cliente->nome,
|
||||
'ativo_app_conectasus_cidadao' => $cliente->ativo_app_conectasus_cidadao,
|
||||
],
|
||||
'permissoes' => $permissoes,
|
||||
'quantidade_notificacoes_nao_lidas' => $this->getQuantidadeNotificacoesNaoLidas(),
|
||||
'quantidade_notas_versao_novas' => $this->getQuantidadeNotasVersaoNovas(),
|
||||
]);
|
||||
}
|
||||
|
||||
public function recuperarSenha(RecuperacaoSenhaRequest $request)
|
||||
{
|
||||
$usuario = Usuario::where('email', $request->email)
|
||||
->whereHas('cidadao', function($query) use ($request) {
|
||||
$query->where('cpf', $request->cpf);
|
||||
})
|
||||
->first();
|
||||
|
||||
if (is_null($usuario)) {
|
||||
|
||||
return response()->json([
|
||||
'message' => 'A informação inserida não está correta, tente novamente.'
|
||||
], Response::HTTP_BAD_REQUEST);
|
||||
}
|
||||
|
||||
if ($usuario) {
|
||||
$senha = Senha::gerar();
|
||||
|
||||
$params = [
|
||||
'senha' => $senha,
|
||||
'troca_senha' => true,
|
||||
];
|
||||
|
||||
$usuario->update($params);
|
||||
|
||||
$object = new \stdClass();
|
||||
$object->user = $usuario->usuario;
|
||||
$object->password = $senha;
|
||||
$object->cliente = $request->header('customer');
|
||||
|
||||
Email::enviar(strtolower($usuario->email), new UsuarioLogin($object));
|
||||
}
|
||||
|
||||
return response()->json([
|
||||
'message' => 'Usuário e senha enviados para o e-mail ' . $usuario->email
|
||||
], Response::HTTP_OK);
|
||||
}
|
||||
|
||||
public function trocarSenha(TrocaSenhaRequest $request, $id)
|
||||
{
|
||||
$usuario = Usuario::findOrFail($id);
|
||||
|
||||
$params = [
|
||||
'senha' => $request->nova_senha,
|
||||
'troca_senha' => false,
|
||||
];
|
||||
|
||||
$usuario->update($params);
|
||||
|
||||
return response()->json($usuario->fresh(), Response::HTTP_OK);
|
||||
}
|
||||
|
||||
private function buildTreeMenu($elements, $identifier = null)
|
||||
{
|
||||
$items = collect();
|
||||
|
||||
foreach ($elements as $element) {
|
||||
if ($element->menu_id === $identifier) {
|
||||
$children = $this->buildTreeMenu($elements, $element->id);
|
||||
|
||||
if ($children) {
|
||||
$element['items'] = $children;
|
||||
}
|
||||
|
||||
$item = [
|
||||
'id' => $element->id,
|
||||
'nome' => $element->nome,
|
||||
];
|
||||
|
||||
if ($element->menu_id) {
|
||||
$item['menu_id'] = $element->menu_id;
|
||||
}
|
||||
|
||||
if ($element->funcionalidade_id) {
|
||||
$item['link'] = '/' . $element->funcionalidade->modulo->identificador . '/' . $element->funcionalidade->identificador;
|
||||
}
|
||||
|
||||
if ($element->icone) {
|
||||
$item['icone'] = $element->icone;
|
||||
}
|
||||
|
||||
$item['items'] = $children;
|
||||
|
||||
$items->push($item);
|
||||
}
|
||||
}
|
||||
|
||||
return $items;
|
||||
}
|
||||
|
||||
private function getQuantidadeNotificacoesNaoLidas()
|
||||
{
|
||||
return sizeOf(NotificacaoService::index()->where('visualizado', false));
|
||||
}
|
||||
|
||||
private function getQuantidadeNotasVersaoNovas()
|
||||
{
|
||||
return NotaVersaoService::index()
|
||||
->where('created_at', '>=', Carbon::now()->subDays(7))
|
||||
->count();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Administracao;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Services\Administracao\ConfiguracaoService;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Http\Response;
|
||||
|
||||
class ConfiguracaoController extends Controller
|
||||
{
|
||||
protected $modulo = 'administracao';
|
||||
protected $funcionalidade = 'configuracao';
|
||||
|
||||
public function edit()
|
||||
{
|
||||
$this->auth(__FUNCTION__);
|
||||
|
||||
return response()->json(ConfiguracaoService::edit(), Response::HTTP_OK);
|
||||
}
|
||||
|
||||
public function update(Request $request)
|
||||
{
|
||||
$this->auth(__FUNCTION__);
|
||||
|
||||
return response()->json(ConfiguracaoService::update($request), Response::HTTP_OK);
|
||||
}
|
||||
}
|
||||
61
api/app/Http/Controllers/Administracao/GestorController.php
Normal file
61
api/app/Http/Controllers/Administracao/GestorController.php
Normal file
@@ -0,0 +1,61 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Administracao;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Services\Administracao\GestorService;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Http\Response;
|
||||
|
||||
class GestorController extends Controller
|
||||
{
|
||||
protected $modulo = 'administracao';
|
||||
protected $funcionalidade = 'gestor';
|
||||
|
||||
public function index()
|
||||
{
|
||||
$this->auth(__FUNCTION__);
|
||||
|
||||
return response()->json(GestorService::index(), Response::HTTP_OK);
|
||||
}
|
||||
|
||||
public function create()
|
||||
{
|
||||
$this->auth(__FUNCTION__);
|
||||
|
||||
return response()->json(GestorService::create(), Response::HTTP_OK);
|
||||
}
|
||||
|
||||
public function store(Request $request)
|
||||
{
|
||||
$this->auth(__FUNCTION__);
|
||||
|
||||
return response()->json(GestorService::store($request), Response::HTTP_CREATED);
|
||||
}
|
||||
|
||||
public function edit($id)
|
||||
{
|
||||
$this->auth(__FUNCTION__);
|
||||
|
||||
return response()->json(GestorService::edit($id), Response::HTTP_OK);
|
||||
}
|
||||
|
||||
public function update(Request $request, $id)
|
||||
{
|
||||
$this->auth(__FUNCTION__);
|
||||
|
||||
return response()->json(GestorService::update($request, $id), Response::HTTP_OK);
|
||||
}
|
||||
|
||||
public function destroy($id)
|
||||
{
|
||||
$this->auth(__FUNCTION__);
|
||||
|
||||
return response()->json(GestorService::destroy($id), Response::HTTP_NO_CONTENT);
|
||||
}
|
||||
|
||||
public function datatable()
|
||||
{
|
||||
return datatables()->of(GestorService::datatable())->skipTotalRecords()->make(true);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Administracao;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Services\Administracao\NotificacaoService;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Http\Response;
|
||||
|
||||
class NotificacaoController extends Controller
|
||||
{
|
||||
protected $modulo = 'administracao';
|
||||
protected $funcionalidade = 'notificacao';
|
||||
|
||||
public function index()
|
||||
{
|
||||
return response()->json(NotificacaoService::index(), Response::HTTP_OK);
|
||||
}
|
||||
|
||||
public function create()
|
||||
{
|
||||
$this->auth(__FUNCTION__);
|
||||
|
||||
return response()->json(NotificacaoService::create(), Response::HTTP_OK);
|
||||
}
|
||||
|
||||
public function store(Request $request)
|
||||
{
|
||||
$this->auth(__FUNCTION__);
|
||||
|
||||
return response()->json(NotificacaoService::store($request), Response::HTTP_CREATED);
|
||||
}
|
||||
|
||||
public function edit($id)
|
||||
{
|
||||
$this->auth(__FUNCTION__);
|
||||
|
||||
return response()->json(NotificacaoService::edit($id), Response::HTTP_OK);
|
||||
}
|
||||
|
||||
public function update(Request $request, $id)
|
||||
{
|
||||
$this->auth(__FUNCTION__);
|
||||
|
||||
return response()->json(NotificacaoService::update($request, $id), Response::HTTP_OK);
|
||||
}
|
||||
|
||||
public function destroy($id)
|
||||
{
|
||||
$this->auth(__FUNCTION__);
|
||||
|
||||
return response()->json(NotificacaoService::destroy($id), Response::HTTP_NO_CONTENT);
|
||||
}
|
||||
|
||||
public function datatable()
|
||||
{
|
||||
return datatables()
|
||||
->of(NotificacaoService::datatable())
|
||||
->filterColumn('administracao_notificacao.updated_at', function ($query, $keyword) {
|
||||
$query->whereRaw("DATE_FORMAT(administracao_notificacao.updated_at, '%d/%m/%Y %H:%i') like ?", ["%{$keyword}%"]);
|
||||
})
|
||||
->make(true);
|
||||
}
|
||||
|
||||
public function list()
|
||||
{
|
||||
return response()->json(NotificacaoService::list(), Response::HTTP_OK);
|
||||
}
|
||||
}
|
||||
201
api/app/Http/Controllers/Administracao/PapelController.php
Normal file
201
api/app/Http/Controllers/Administracao/PapelController.php
Normal file
@@ -0,0 +1,201 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Administracao;
|
||||
|
||||
use App\Enums\Administracao\HistoricoAcao;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Requests\Administracao\PapelRequest;
|
||||
use App\Models\Administracao\Modulo;
|
||||
use App\Models\Administracao\Papel;
|
||||
use App\Models\Administracao\PapelPermissaoHistorico;
|
||||
use Illuminate\Http\Response;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class PapelController extends Controller
|
||||
{
|
||||
protected $modulo = 'administracao';
|
||||
protected $funcionalidade = 'papel';
|
||||
|
||||
public function datatable()
|
||||
{
|
||||
$currentLotacao = self::getCurrentLotacao();
|
||||
|
||||
$papeis = DB::table('administracao_papel AS papel')
|
||||
->select(
|
||||
'papel.id',
|
||||
'papel.nome'
|
||||
)
|
||||
->whereNull('papel.deleted_at')
|
||||
->when( $currentLotacao->usuario->is_administrador !== true, fn ($q) => $q
|
||||
->whereExists(fn ($q) => $q->select(DB::raw(1))
|
||||
->from('administracao_gestor_papel')
|
||||
->join('administracao_gestor', 'administracao_gestor.id', 'administracao_gestor_papel.gestor_id')
|
||||
->where('administracao_gestor.usuario_id', $currentLotacao->usuario_id)
|
||||
->whereColumn('administracao_gestor_papel.papel_id', 'papel.id')
|
||||
));
|
||||
|
||||
return datatables()->of($papeis)->skipTotalRecords()->make(true);
|
||||
}
|
||||
|
||||
public function index()
|
||||
{
|
||||
$this->auth(__FUNCTION__);
|
||||
|
||||
$papeis = $this->get(Papel::class)->orderBy('nome')->get();
|
||||
|
||||
return response()->json($papeis, Response::HTTP_OK);
|
||||
}
|
||||
|
||||
public function create()
|
||||
{
|
||||
$this->auth(__FUNCTION__);
|
||||
|
||||
return [
|
||||
'form' => $this->getFormData(),
|
||||
'model' => [
|
||||
'nome' => null,
|
||||
'permissoes' => []
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
public function store(PapelRequest $request)
|
||||
{
|
||||
$this->auth(__FUNCTION__);
|
||||
|
||||
$papel = new Papel;
|
||||
$params = $request->all();
|
||||
|
||||
DB::transaction(function () use ($papel, $params) {
|
||||
|
||||
$papel->fill($params);
|
||||
$papel->save();
|
||||
|
||||
$permissoes = $papel->permissoes()->sync($params['permissoes']);
|
||||
|
||||
foreach ($permissoes['attached'] as $permissao) {
|
||||
PapelPermissaoHistorico::create([
|
||||
'acao_id' => HistoricoAcao::CADASTRO,
|
||||
'papel_id' => $papel->id,
|
||||
'permissao_id' => $permissao,
|
||||
]);
|
||||
}
|
||||
|
||||
foreach ($permissoes['detached'] as $permissao) {
|
||||
PapelPermissaoHistorico::create([
|
||||
'acao_id' => HistoricoAcao::EXCLUSAO,
|
||||
'papel_id' => $papel->id,
|
||||
'permissao_id' => $permissao,
|
||||
]);
|
||||
}
|
||||
});
|
||||
|
||||
return response()->json($papel->fresh(), Response::HTTP_CREATED);
|
||||
}
|
||||
|
||||
public function show($id)
|
||||
{
|
||||
$this->auth(__FUNCTION__);
|
||||
|
||||
return response()->json($this->get(Papel::class, $id), Response::HTTP_OK);
|
||||
}
|
||||
|
||||
public function edit($id)
|
||||
{
|
||||
$this->auth(__FUNCTION__);
|
||||
|
||||
$papel = Papel::findOrFail($id);
|
||||
|
||||
return [
|
||||
'form' => $this->getFormData(),
|
||||
'model' => [
|
||||
'nome' => $papel->nome,
|
||||
'permissoes' => $papel->permissoes->pluck('id'),
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
public function getFormData()
|
||||
{
|
||||
$currentLotacao = self::getCurrentLotacao();
|
||||
|
||||
return [
|
||||
'modulos' => Modulo::whereHas('funcionalidades')
|
||||
->when($currentLotacao->usuario->is_administrador !== true, fn ($q) => $q
|
||||
->whereHas('funcionalidades.permissoes.gestores', fn ($q) => $q
|
||||
->where('usuario_id', $currentLotacao->usuario_id)
|
||||
)
|
||||
)
|
||||
->orderBy('nome')
|
||||
->get()
|
||||
->map(fn ($modulo) => [
|
||||
'id' => $modulo->id,
|
||||
'nome' => $modulo->nome,
|
||||
'funcionalidades' => $modulo->funcionalidades()
|
||||
->when($currentLotacao->usuario->is_administrador !== true, fn ($q) => $q
|
||||
->whereHas('permissoes.gestores', fn ($q) => $q
|
||||
->where('usuario_id', $currentLotacao->usuario_id)
|
||||
)
|
||||
)
|
||||
->orderBy('nome')
|
||||
->get()
|
||||
->map(fn ($funcionalidade) => [
|
||||
'id' => $funcionalidade->id,
|
||||
'nome' => $funcionalidade->nome,
|
||||
'permissoes' => $funcionalidade->permissoes()
|
||||
->when($currentLotacao->usuario->is_administrador !== true, fn ($q) => $q
|
||||
->whereHas('gestores', fn ($q) => $q
|
||||
->where('usuario_id', $currentLotacao->usuario_id)
|
||||
)
|
||||
)
|
||||
->get()
|
||||
->map(fn ($permissao) => [
|
||||
'id' => $permissao->id,
|
||||
'nome' => $permissao->crudAcao->nome,
|
||||
]),
|
||||
]),
|
||||
]),
|
||||
];
|
||||
}
|
||||
|
||||
public function update(PapelRequest $request, $id)
|
||||
{
|
||||
$this->auth(__FUNCTION__);
|
||||
|
||||
$papel = Papel::findOrFail($id);
|
||||
$params = $request->all();
|
||||
|
||||
DB::transaction(function () use ($papel, $params) {
|
||||
|
||||
$papel->update($params);
|
||||
$permissoes = $papel->permissoes()->sync($params['permissoes']);
|
||||
|
||||
foreach ($permissoes['attached'] as $permissao) {
|
||||
PapelPermissaoHistorico::create([
|
||||
'acao_id' => HistoricoAcao::CADASTRO,
|
||||
'papel_id' => $papel->id,
|
||||
'permissao_id' => $permissao,
|
||||
]);
|
||||
}
|
||||
|
||||
foreach ($permissoes['detached'] as $permissao) {
|
||||
PapelPermissaoHistorico::create([
|
||||
'acao_id' => HistoricoAcao::EXCLUSAO,
|
||||
'papel_id' => $papel->id,
|
||||
'permissao_id' => $permissao,
|
||||
]);
|
||||
}
|
||||
});
|
||||
|
||||
return response()->json($papel->fresh(), Response::HTTP_OK);
|
||||
}
|
||||
|
||||
public function destroy($id)
|
||||
{
|
||||
$this->auth(__FUNCTION__);
|
||||
|
||||
Papel::findOrFail($id)->delete();
|
||||
|
||||
return response()->json(null, Response::HTTP_NO_CONTENT);
|
||||
}
|
||||
}
|
||||
158
api/app/Http/Controllers/Administracao/PermissaoController.php
Normal file
158
api/app/Http/Controllers/Administracao/PermissaoController.php
Normal file
@@ -0,0 +1,158 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Administracao;
|
||||
|
||||
use App\Enums\Administracao\HistoricoAcao;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Requests\Administracao\PermissaoRequest;
|
||||
use App\Models\Administracao\LotacaoPapelHistorico;
|
||||
use App\Models\Administracao\LotacaoPermissaoHistorico;
|
||||
use App\Models\Administracao\Modulo;
|
||||
use App\Models\Administracao\Papel;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Lotacao;
|
||||
use Illuminate\Http\Response;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class PermissaoController extends Controller
|
||||
{
|
||||
protected $modulo = 'administracao';
|
||||
protected $funcionalidade = 'permissao';
|
||||
|
||||
public static function datatable()
|
||||
{
|
||||
$lotacoes = DB::table('cadastro_lotacao AS lotacao')
|
||||
->join('cadastro_infraestrutura AS infraestrutura', 'infraestrutura.id', 'lotacao.infraestrutura_id')
|
||||
->join('cadastro_unidade AS unidade', 'unidade.id', 'infraestrutura.unidade_id')
|
||||
->join('cadastro_usuario AS usuario', 'usuario.id', 'lotacao.usuario_id')
|
||||
->join('cadastro_cidadao AS cidadao', 'cidadao.id', 'usuario.cidadao_id')
|
||||
->join('sigtap.ocupacao AS ocupacao', 'ocupacao.id', 'lotacao.ocupacao_id')
|
||||
->select([
|
||||
'lotacao.id',
|
||||
'unidade.nome_fantasia AS unidade_nome_fantasia',
|
||||
DB::raw('COALESCE(infraestrutura.nome, unidade.nome_fantasia) AS infraestrutura_nome'),
|
||||
'cidadao.nome AS usuario_nome',
|
||||
'ocupacao.nome AS ocupacao_nome',
|
||||
])
|
||||
->whereNull('lotacao.deleted_at')
|
||||
->whereNull('usuario.deleted_at')
|
||||
->where('lotacao.ativo', true);
|
||||
|
||||
return datatables()->of($lotacoes)->skipTotalRecords()->toJson();
|
||||
}
|
||||
|
||||
public function edit($id)
|
||||
{
|
||||
$this->auth(__FUNCTION__);
|
||||
|
||||
$lotacao = Lotacao::findOrFail($id);
|
||||
|
||||
$currentLotacao = self::getCurrentLotacao();
|
||||
|
||||
return [
|
||||
'form' => [
|
||||
'unidade_nome_fantasia' => $lotacao->infraestrutura->unidade->nome_fantasia,
|
||||
'infraestrutura_nome' => $lotacao->infraestrutura->nome,
|
||||
'usuario_nome' => $lotacao->usuario->cidadao->nome,
|
||||
'ocupacao_nome' => $lotacao->ocupacao->nome,
|
||||
'papeis' => Papel::when($currentLotacao->usuario->is_administrador !== true, fn ($q) => $q
|
||||
->whereHas('gestores', fn ($q) => $q
|
||||
->where('usuario_id', $currentLotacao->usuario_id)
|
||||
)
|
||||
)
|
||||
->orderBy('nome')
|
||||
->get()
|
||||
->map(fn ($papel) => [
|
||||
'id' => $papel->id,
|
||||
'nome' => $papel->nome,
|
||||
]),
|
||||
'modulos' => Modulo::whereHas('funcionalidades')
|
||||
->when($currentLotacao->usuario->is_administrador !== true, fn ($q) => $q
|
||||
->whereHas('funcionalidades.permissoes.gestores', fn ($q) => $q
|
||||
->where('usuario_id', $currentLotacao->usuario_id)
|
||||
)
|
||||
)
|
||||
->orderBy('nome')
|
||||
->get()
|
||||
->map(fn ($modulo) => [
|
||||
'id' => $modulo->id,
|
||||
'nome' => $modulo->nome,
|
||||
'funcionalidades' => $modulo->funcionalidades()
|
||||
->when($currentLotacao->usuario->is_administrador !== true, fn ($q) => $q
|
||||
->whereHas('permissoes.gestores', fn ($q) => $q
|
||||
->where('usuario_id', $currentLotacao->usuario_id)
|
||||
)
|
||||
)
|
||||
->orderBy('nome')
|
||||
->get()
|
||||
->map(fn ($funcionalidade) => [
|
||||
'id' => $funcionalidade->id,
|
||||
'nome' => $funcionalidade->nome,
|
||||
'permissoes' => $funcionalidade->permissoes()
|
||||
->when($currentLotacao->usuario->is_administrador !== true, fn ($q) => $q
|
||||
->whereHas('gestores', fn ($q) => $q
|
||||
->where('usuario_id', $currentLotacao->usuario_id)
|
||||
)
|
||||
)
|
||||
->get()
|
||||
->map(fn ($permissao) => [
|
||||
'id' => $permissao->id,
|
||||
'nome' => $permissao->crudAcao->nome,
|
||||
]),
|
||||
]),
|
||||
]),
|
||||
],
|
||||
'model' => [
|
||||
'papeis' => $lotacao->papeis->pluck('id'),
|
||||
'permissoes' => $lotacao->permissoes->pluck('id'),
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
public function update(PermissaoRequest $request, $id)
|
||||
{
|
||||
$this->auth(__FUNCTION__);
|
||||
|
||||
$lotacao = Lotacao::findOrFail($id);
|
||||
$params = $request->all();
|
||||
|
||||
DB::transaction(function () use ($lotacao, $params) {
|
||||
|
||||
$papeis = $lotacao->papeis()->sync($params['papeis']);
|
||||
$permissoes = $lotacao->permissoes()->sync($params['permissoes']);
|
||||
|
||||
foreach ($papeis['attached'] as $papel) {
|
||||
LotacaoPapelHistorico::create([
|
||||
'acao_id' => HistoricoAcao::CADASTRO,
|
||||
'lotacao_id' => $lotacao->id,
|
||||
'papel_id' => $papel,
|
||||
]);
|
||||
}
|
||||
|
||||
foreach ($papeis['detached'] as $papel) {
|
||||
LotacaoPapelHistorico::create([
|
||||
'acao_id' => HistoricoAcao::EXCLUSAO,
|
||||
'lotacao_id' => $lotacao->id,
|
||||
'papel_id' => $papel,
|
||||
]);
|
||||
}
|
||||
|
||||
foreach ($permissoes['attached'] as $permissao) {
|
||||
LotacaoPermissaoHistorico::create([
|
||||
'acao_id' => HistoricoAcao::CADASTRO,
|
||||
'lotacao_id' => $lotacao->id,
|
||||
'permissao_id' => $permissao,
|
||||
]);
|
||||
}
|
||||
|
||||
foreach ($permissoes['detached'] as $permissao) {
|
||||
LotacaoPermissaoHistorico::create([
|
||||
'acao_id' => HistoricoAcao::EXCLUSAO,
|
||||
'lotacao_id' => $lotacao->id,
|
||||
'permissao_id' => $permissao,
|
||||
]);
|
||||
}
|
||||
});
|
||||
|
||||
return response()->json($lotacao->fresh(), Response::HTTP_OK);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Administracao;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Services\Administracao\RelatorioAcessoFuncionalidadeService;
|
||||
use Illuminate\Http\Response;
|
||||
|
||||
class RelatorioAcessoFuncionalidadeController extends Controller
|
||||
{
|
||||
protected $modulo = 'administracao';
|
||||
protected $funcionalidade = 'relatorio-acesso-funcionalidade';
|
||||
|
||||
public function index()
|
||||
{
|
||||
$this->auth(__FUNCTION__);
|
||||
|
||||
return response()->json(RelatorioAcessoFuncionalidadeService::index(), Response::HTTP_OK);
|
||||
}
|
||||
|
||||
public function create()
|
||||
{
|
||||
return response()->json(RelatorioAcessoFuncionalidadeService::create(), Response::HTTP_OK);
|
||||
}
|
||||
|
||||
public function list()
|
||||
{
|
||||
return response()->json(RelatorioAcessoFuncionalidadeService::list(), Response::HTTP_OK);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Administracao;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Services\Administracao\RelatorioAcessoSistemaService;
|
||||
use Illuminate\Http\Response;
|
||||
|
||||
class RelatorioAcessoSistemaController extends Controller
|
||||
{
|
||||
protected $modulo = 'administracao';
|
||||
protected $funcionalidade = 'relatorio-acesso-sistema';
|
||||
|
||||
public function index()
|
||||
{
|
||||
$this->auth(__FUNCTION__);
|
||||
|
||||
return response()->json(RelatorioAcessoSistemaService::index(), Response::HTTP_OK);
|
||||
}
|
||||
|
||||
public function create()
|
||||
{
|
||||
return response()->json(RelatorioAcessoSistemaService::create(), Response::HTTP_OK);
|
||||
}
|
||||
|
||||
public function list()
|
||||
{
|
||||
return response()->json(RelatorioAcessoSistemaService::list(), Response::HTTP_OK);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Administracao;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Services\Administracao\RelatorioHistoricoPapelLotacaoService;
|
||||
use Illuminate\Http\Response;
|
||||
|
||||
class RelatorioHistoricoPapelLotacaoController extends Controller
|
||||
{
|
||||
protected $modulo = 'administracao';
|
||||
protected $funcionalidade = 'relatorio-historico-papel-lotacao';
|
||||
|
||||
public function index()
|
||||
{
|
||||
$this->auth(__FUNCTION__);
|
||||
|
||||
return response()->json(RelatorioHistoricoPapelLotacaoService::index(), Response::HTTP_OK);
|
||||
}
|
||||
|
||||
public function create()
|
||||
{
|
||||
return response()->json(RelatorioHistoricoPapelLotacaoService::create(), Response::HTTP_OK);
|
||||
}
|
||||
|
||||
public function list()
|
||||
{
|
||||
$this->auth(__FUNCTION__);
|
||||
|
||||
return response()->json(RelatorioHistoricoPapelLotacaoService::list(), Response::HTTP_OK);
|
||||
}
|
||||
|
||||
public function autocompleteUsuario()
|
||||
{
|
||||
return datatables()->of(RelatorioHistoricoPapelLotacaoService::autocompleteUsuario())->toJson();
|
||||
}
|
||||
|
||||
public function autocompleteUsuarioResponsavel()
|
||||
{
|
||||
return datatables()->of(RelatorioHistoricoPapelLotacaoService::autocompleteUsuarioResponsavel())->toJson();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Administracao;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Services\Administracao\RelatorioHistoricoPermissaoLotacaoService;
|
||||
use Illuminate\Http\Response;
|
||||
|
||||
class RelatorioHistoricoPermissaoLotacaoController extends Controller
|
||||
{
|
||||
protected $modulo = 'administracao';
|
||||
protected $funcionalidade = 'relatorio-historico-permissao-lotacao';
|
||||
|
||||
public function index()
|
||||
{
|
||||
$this->auth(__FUNCTION__);
|
||||
|
||||
return response()->json(RelatorioHistoricoPermissaoLotacaoService::index(), Response::HTTP_OK);
|
||||
}
|
||||
|
||||
public function create()
|
||||
{
|
||||
return response()->json(RelatorioHistoricoPermissaoLotacaoService::create(), Response::HTTP_OK);
|
||||
}
|
||||
|
||||
public function list()
|
||||
{
|
||||
$this->auth(__FUNCTION__);
|
||||
|
||||
return response()->json(RelatorioHistoricoPermissaoLotacaoService::list(), Response::HTTP_OK);
|
||||
}
|
||||
|
||||
public function autocompleteUsuario()
|
||||
{
|
||||
return datatables()->of(RelatorioHistoricoPermissaoLotacaoService::autocompleteUsuario())->toJson();
|
||||
}
|
||||
|
||||
public function autocompleteUsuarioResponsavel()
|
||||
{
|
||||
return datatables()->of(RelatorioHistoricoPermissaoLotacaoService::autocompleteUsuarioResponsavel())->toJson();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Administracao;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Services\Administracao\RelatorioHistoricoPermissaoPapelService;
|
||||
use Illuminate\Http\Response;
|
||||
|
||||
class RelatorioHistoricoPermissaoPapelController extends Controller
|
||||
{
|
||||
protected $modulo = 'administracao';
|
||||
protected $funcionalidade = 'relatorio-historico-permissao-papel';
|
||||
|
||||
public function index()
|
||||
{
|
||||
$this->auth(__FUNCTION__);
|
||||
|
||||
return response()->json(RelatorioHistoricoPermissaoPapelService::index(), Response::HTTP_OK);
|
||||
}
|
||||
|
||||
public function create()
|
||||
{
|
||||
return response()->json(RelatorioHistoricoPermissaoPapelService::create(), Response::HTTP_OK);
|
||||
}
|
||||
|
||||
public function list()
|
||||
{
|
||||
$this->auth(__FUNCTION__);
|
||||
|
||||
return response()->json(RelatorioHistoricoPermissaoPapelService::list(), Response::HTTP_OK);
|
||||
}
|
||||
|
||||
public function autocompleteUsuario()
|
||||
{
|
||||
return datatables()->of(RelatorioHistoricoPermissaoPapelService::autocompleteUsuario())->toJson();
|
||||
}
|
||||
|
||||
public function autocompleteUsuarioResponsavel()
|
||||
{
|
||||
return datatables()->of(RelatorioHistoricoPermissaoPapelService::autocompleteUsuarioResponsavel())->toJson();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Administracao;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Services\Administracao\RelatorioPapelLotacaoService;
|
||||
use Illuminate\Http\Response;
|
||||
|
||||
class RelatorioPapelLotacaoController extends Controller
|
||||
{
|
||||
protected $modulo = 'administracao';
|
||||
protected $funcionalidade = 'relatorio-papel-lotacao';
|
||||
|
||||
public function index()
|
||||
{
|
||||
$this->auth(__FUNCTION__);
|
||||
|
||||
return response()->json(RelatorioPapelLotacaoService::index(), Response::HTTP_OK);
|
||||
}
|
||||
|
||||
public function create()
|
||||
{
|
||||
return response()->json(RelatorioPapelLotacaoService::create(), Response::HTTP_OK);
|
||||
}
|
||||
|
||||
public function list()
|
||||
{
|
||||
return response()->json(RelatorioPapelLotacaoService::list(), Response::HTTP_OK);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Administracao;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Services\Administracao\RelatorioPermissaoLotacaoService;
|
||||
use Illuminate\Http\Response;
|
||||
|
||||
class RelatorioPermissaoLotacaoController extends Controller
|
||||
{
|
||||
protected $modulo = 'administracao';
|
||||
protected $funcionalidade = 'relatorio-permissao-lotacao';
|
||||
|
||||
public function index()
|
||||
{
|
||||
$this->auth(__FUNCTION__);
|
||||
|
||||
return response()->json(RelatorioPermissaoLotacaoService::index(), Response::HTTP_OK);
|
||||
}
|
||||
|
||||
public function create()
|
||||
{
|
||||
return response()->json(RelatorioPermissaoLotacaoService::create(), Response::HTTP_OK);
|
||||
}
|
||||
|
||||
public function list()
|
||||
{
|
||||
return response()->json(RelatorioPermissaoLotacaoService::list(), Response::HTTP_OK);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Administracao;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Services\Administracao\RelatorioPermissaoPapelService;
|
||||
use Illuminate\Http\Response;
|
||||
|
||||
class RelatorioPermissaoPapelController extends Controller
|
||||
{
|
||||
protected $modulo = 'administracao';
|
||||
protected $funcionalidade = 'relatorio-permissao-papel';
|
||||
|
||||
public function index()
|
||||
{
|
||||
$this->auth(__FUNCTION__);
|
||||
|
||||
return response()->json(RelatorioPermissaoPapelService::index(), Response::HTTP_OK);
|
||||
}
|
||||
|
||||
public function create()
|
||||
{
|
||||
return response()->json(RelatorioPermissaoPapelService::create(), Response::HTTP_OK);
|
||||
}
|
||||
|
||||
public function list()
|
||||
{
|
||||
return response()->json(RelatorioPermissaoPapelService::list(), Response::HTTP_OK);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user