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', 'password' => 'required|string|min:8',
]); ]);
try {
$user = $this->userService->createUser($validated); $user = $this->userService->createUser($validated);
return redirect()->route('users.view', ['user' => $user]); 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 App\Http\Controllers\Controller;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class LogoutController extends Controller class LogoutController extends Controller
{ {
public function logout(User $user){ public function logout(Request $request)
$user->tokens()->delete(); {
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 __construct(UserService $userService) {}
public function dashboard(Request $request): View public function dashboard(Request $request): View
{ {
$users = User::all(); $users = User::all();
$users->tokens()->delete();
return view('dashboard', ['users' => $users]); return view('dashboard', ['users' => $users]);
} }
} }

View File

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

View File

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

View File

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