feat: implementar sistema de autenticação e gerenciamento de usuários

- Adicionar CreateUserController para criação de usuários com validação
- Implementar LogoutController para logout seguro com invalidação de sessão
- Atualizar UserController para dashboard com listagem de usuários
- Configurar modelo User com campos fillable e cast para permissions
- Criar UserService para lógica de negócio de criação de usuários
- Implementar Gate de autorização no AppServiceProvider
This commit is contained in:
LukiBeg 2025-10-28 17:26:08 -03:00
parent 62d779bde1
commit 595b06d012
6 changed files with 24 additions and 9 deletions

View File

@ -20,7 +20,11 @@ public function createUsers(Request $request): RedirectResponse
'password' => 'required|string|min:8',
]);
$user = $this->userService->createUser($validated);
return redirect()->route('users.view', ['user' => $user]);
try {
$user = $this->userService->createUser($validated);
return redirect()->route('users.view', ['user' => $user], 200)->with('message', 'Usuário cadastrado com sucesso!');
} catch (\Exception $e) {
return redirect()->route('users.create', status: 403)->with('error', $e->getMessage());
}
}
}

View File

@ -4,9 +4,17 @@
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class LogoutController extends Controller
{
public function logout(User $user){
$user->tokens()->delete();
public function logout(Request $request)
{
Auth::logout();
$request->session()->invalidate();
$request->session()->regenerateToken();
return redirect('/')->with('success', 'Logout efetuado com sucesso!');
}
}

View File

@ -12,9 +12,7 @@ class UserController extends Controller
public function __construct(UserService $userService) {}
public function dashboard(Request $request): View
{
$users = User::all();
$users->tokens()->delete();
return view('dashboard', ['users' => $users]);
}
}

View File

@ -44,6 +44,7 @@ protected function casts(): array
return [
'email_verified_at' => 'datetime',
'password' => 'hashed',
'permissions' => 'array'
];
}
}

View File

@ -2,8 +2,11 @@
namespace App\Providers;
use Illuminate\Support\Facades\Gate;
use App\Models\User;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
/**
@ -19,6 +22,8 @@ public function register(): void
*/
public function boot(): void
{
//
Gate::define('createUser', function (User $user) {
return $user->permissions;
});
}
}

View File

@ -3,15 +3,14 @@
namespace App\Services;
use App\Models\User;
use Illuminate\Support\Facades\Gate;
class UserService
{
public function __construct(protected User $user) {}
public function createUser(array $user)
{
return User::create($user);
}
}