File manager - Edit - /var/www/html/portalHomolog/app/Http/Controllers/Demandas/DemandaTiController.php
Back
<?php namespace App\Http\Controllers\Demandas; use App\Http\Controllers\Controller; use App\Models\IndicadoresTi\Assunto; use App\Models\IndicadoresTi\Cliente; use App\Models\IndicadoresTi\Subassunto; use App\Models\User; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; class DemandaTiController extends Controller { private string $permissao = 'GERENCIADOR_DEMANDAS'; /** Retorna true quando o usuário NÃO possui o papel exigido na permissão do módulo. */ private function semPermissaoModulo(string $papel): bool { return $this->checkPermissao($this->permissao, $papel) !== null; } /** Retorna true quando o usuário NÃO possui a permissão de atendimento TI. */ private function semSuporteTi(): bool { return !auth()->user()?->permissoes->pluck('permissao')->contains('SUPORTE_TI'); } private function respostaNegada(): JsonResponse { return response()->json(['message' => __('Permissão negada.')], 403); } public function assuntos(Request $request, int $setor): JsonResponse { if ($this->semPermissaoModulo('visualizar')) { return $this->respostaNegada(); } $query = Assunto::where('setor_id', $setor)->orderBy('nome'); if (!$request->boolean('todos')) { $query->where('publico', true); } return response()->json($query->get(['id', 'nome'])); } public function subassuntos(Request $request, int $assunto): JsonResponse { if ($this->semPermissaoModulo('visualizar')) { return $this->respostaNegada(); } $query = Subassunto::where('assunto_id', $assunto)->orderBy('nome'); if (!$request->boolean('todos')) { $query->where('publico', true); } return response()->json($query->get(['id', 'nome'])); } public function buscarSolicitantes(Request $request): JsonResponse { // Expõe dados pessoais (e-mail, CPF de clientes): restrito ao atendimento TI. if ($this->semPermissaoModulo('visualizar') || $this->semSuporteTi()) { return $this->respostaNegada(); } $q = trim($request->get('q', '')); if (strlen($q) < 2) { return response()->json([]); } $usuarios = User::where(function ($query) use ($q) { $query->where('firstName', 'like', "%{$q}%") ->orWhere('lastName', 'like', "%{$q}%") ->orWhere('matriculation', 'like', "%{$q}%"); }) ->limit(8)->get(['id', 'firstName', 'lastName', 'email']) ->map(fn($u) => [ 'id' => $u->id, 'nome' => $u->name, 'tipo' => 'usuario', 'extra' => $u->email, ]); $clientes = Cliente::where(function ($query) use ($q) { $query->where('nome', 'like', "%{$q}%") ->orWhere('cpf', 'like', "%{$q}%") ->orWhere('matricula', 'like', "%{$q}%"); }) ->limit(8)->get(['id', 'nome', 'cpf', 'matricula']) ->map(fn($c) => [ 'id' => $c->id, 'nome' => $c->nome, 'tipo' => 'cliente', 'extra' => $c->cpf ?? $c->matricula ?? '', ]); return response()->json($usuarios->merge($clientes)->values()); } public function storeCliente(Request $request): JsonResponse { if ($this->semPermissaoModulo('adicionar') || $this->semSuporteTi()) { return $this->respostaNegada(); } $dados = $request->validate([ 'nome' => ['required', 'string', 'max:255'], 'cpf' => ['nullable', 'string', 'max:14'], 'matricula' => ['nullable', 'string', 'max:50'], 'telefone' => ['nullable', 'string', 'max:30'], 'email' => ['nullable', 'email', 'max:255'], ]); $cliente = Cliente::create($dados); return response()->json([ 'ok' => true, 'id' => $cliente->id, 'nome' => $cliente->nome, 'tipo' => 'cliente', ]); } }
| ver. 1.4 |
Github
|
.
| PHP 8.3.28 | Generation time: 0.02 |
proxy
|
phpinfo
|
Settings