File manager - Edit - /var/www/html/portal/app/Console/Commands/ContaAngraCriarUsuarioInfotestCommand.php
Back
<?php namespace App\Console\Commands; use App\Enums\StatusPermission; use App\Models\Permissao; use App\Models\User; use Illuminate\Console\Command; use Illuminate\Support\Facades\DB; /** * Usuário de teste para Conta Angra / painel, com todas as permissões definidas em * {@see StatusPermission}. Dados pessoais intencionalmente fictícios. * * Ex.: php artisan conta-angra:criar-usuario-infotest * php artisan conta-angra:criar-usuario-infotest --password="MinhaSenha!" --force */ class ContaAngraCriarUsuarioInfotestCommand extends Command { protected $signature = 'conta-angra:criar-usuario-infotest {--password=SenhaFicticiaInfotest123! : Senha de login (somente desenvolvimento / homologação)} {--email=infotest@example.invalid : E-mail fictício (único no cadastro)} {--cpf=52998224725 : CPF fictício apenas com dígitos (formato válido, não é pessoa real)} {--phone=24999887766 : Telefone fictício apenas com dígitos} {--force : Se já existir (e-mail ou CPF), atualiza senha e sincroniza permissões em massa}'; protected $description = 'Cria o usuário de teste "Infotest" com todas as permissões (enum StatusPermission) para Conta Angra / administrativo'; public function handle(): int { if (app()->isProduction() && ! $this->option('force')) { $this->error( 'Em produção é obrigatório passar --force após confirmar que deseja criar esse usuário de teste.' ); return self::FAILURE; } $email = mb_strtolower((string) $this->option('email')); $cpf = preg_replace('/\D/', '', (string) $this->option('cpf')); $phone = preg_replace('/\D/', '', (string) $this->option('phone')); if (strlen($cpf) !== 11) { $this->error('O CPF deve ter 11 dígitos (informe apenas números).'); return self::FAILURE; } $existentePorEmail = User::query()->where('email', $email)->first(); $existentePorCpf = User::query()->where('cpf', $cpf)->first(); if ($existentePorEmail && $existentePorCpf && $existentePorEmail->id !== $existentePorCpf->id) { $this->error('Conflito: o e‑mail já pertence a um usuário e o CPF a outro.'); return self::FAILURE; } $user = $existentePorEmail ?? $existentePorCpf; $wantForce = (bool) $this->option('force'); if ($user instanceof User && ! $wantForce) { $this->warn('Usuário já existe com este e‑mail ou CPF. Execute com --force para atualizar senha e permissões.'); return self::FAILURE; } $passwordPlain = (string) $this->option('password'); try { DB::transaction(function () use (&$user, $email, $cpf, $phone, $passwordPlain): void { if (! $user instanceof User) { $user = User::create([ 'structure_id' => null, 'firstName' => 'Infotest', 'lastName' => 'Usuário de Teste', 'cpf' => $cpf, 'matriculation' => 'TESTE-INFOTEST-0001', 'phoneNumber' => $phone, 'email' => $email, 'password' => $passwordPlain, 'photo' => 'default/assets/img/icons/usuario.png', 'status' => 'ATIVADO', 'isPasswordDefault' => false, 'isServidorPublico' => 'Não', 'isWhatsapp' => false, ]); $this->info("Usuário criado (id {$user->id})."); } else { $user->fill([ 'firstName' => 'Infotest', 'lastName' => 'Usuário de Teste', 'cpf' => $cpf, 'matriculation' => $user->matriculation ?: 'TESTE-INFOTEST-0001', 'phoneNumber' => $phone, 'email' => $email, 'password' => $passwordPlain, 'status' => 'ATIVADO', 'isPasswordDefault' => false, ]); $user->save(); $this->info("Usuário existente atualizado (id {$user->id})."); } $this->sincronizarTodasPermissoes($user); }); } catch (\Throwable $e) { $this->error('Falha ao criar ou atualizar: '.$e->getMessage()); return self::FAILURE; } $permCount = Permissao::query()->where('user_id', $user->id)->count(); $this->table( ['Campo', 'Valor'], [ ['Nome', "{$user->firstName} {$user->lastName}"], ['E-mail', $user->email], ['CPF', $user->cpf], ['Permissões (registros)', (string) $permCount], ] ); $this->comment( 'Login com o e‑mail acima e a senha informada (--password). Não exponha esse usuário na internet.' ); return self::SUCCESS; } /** * Garante um registro em `permissoes` por case do enum, com CRUD liberado e status ATIVADO. */ private function sincronizarTodasPermissoes(User $user): void { foreach (StatusPermission::cases() as $case) { $nomePermissao = $case->name; Permissao::updateOrCreate( [ 'user_id' => $user->id, 'permissao' => $nomePermissao, ], [ 'visualizar' => 1, 'adicionar' => 1, 'editar' => 1, 'excluir' => 1, 'status' => 'ATIVADO', ] ); } $this->info(sprintf('Permissões sincronizadas: %d papéis (enum StatusPermission).', count(StatusPermission::cases()))); } }
| ver. 1.4 |
Github
|
.
| PHP 8.3.28 | Generation time: 0.1 |
proxy
|
phpinfo
|
Settings