diff --git a/app/Http/Controllers/Auth/AuthenticatedSessionController.php b/app/Http/Controllers/Auth/AuthenticatedSessionController.php index 43131d8..8e2987d 100644 --- a/app/Http/Controllers/Auth/AuthenticatedSessionController.php +++ b/app/Http/Controllers/Auth/AuthenticatedSessionController.php @@ -28,20 +28,30 @@ public function store(LoginRequest $request): RedirectResponse $request->session()->regenerate(); - return redirect()->intended(route('dashboard', absolute: false)); + // Ambil data user dari session + $userData = session('user_data'); + + // Cek role dan redirect sesuai role + if ($userData && isset($userData['role']) && $userData['role'] === 'penjaga perpus') { + return redirect()->route('admin.dashboard'); + } + + // Default redirect ke dashboard siswa + return redirect()->route('dashboard'); } /** * Destroy an authenticated session. */ public function destroy(Request $request): RedirectResponse -{ - Auth::guard('web')->logout(); + { + Auth::guard('web')->logout(); - $request->session()->forget('user_data'); + $request->session()->forget('user_data'); - $request->session()->invalidate(); - $request->session()->regenerateToken(); - return redirect('/'); -} -} + $request->session()->invalidate(); + $request->session()->regenerateToken(); + + return redirect('/'); + } +} \ No newline at end of file diff --git a/app/Http/Middleware/CheckRole.php b/app/Http/Middleware/CheckRole.php index 9db1672..4498f31 100644 --- a/app/Http/Middleware/CheckRole.php +++ b/app/Http/Middleware/CheckRole.php @@ -4,32 +4,27 @@ use Closure; use Illuminate\Http\Request; -use Illuminate\Support\Facades\Auth; use Symfony\Component\HttpFoundation\Response; class CheckRole { /** * Handle an incoming request. - * - * @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next */ - public function handle(Request $request, Closure $next, ...$roles): Response + public function handle(Request $request, Closure $next, string $role): Response { - if (!Auth::check()) { - return redirect('login'); + $userData = session('user_data'); + + // Cek apakah user sudah login + if (!$userData) { + return redirect()->route('login'); } - $user = Auth::user(); - - // Loop melalui role yang diizinkan (misal: 'guru', 'admin') - foreach ($roles as $role) { - if ($user->role == $role) { - return $next($request); - } + // Cek apakah role sesuai + if (!isset($userData['role']) || $userData['role'] !== $role) { + abort(403, 'Akses ditolak. Anda tidak memiliki izin untuk mengakses halaman ini.'); } - // Jika role tidak cocok, tolak akses - abort(403, 'AKSES DITOLAK: Anda tidak memiliki hak untuk mengakses halaman ini.'); + return $next($request); } } \ No newline at end of file diff --git a/app/Http/Middleware/SessionAuthMiddleware.php b/app/Http/Middleware/SessionAuthMiddleware.php new file mode 100644 index 0000000..d756f70 --- /dev/null +++ b/app/Http/Middleware/SessionAuthMiddleware.php @@ -0,0 +1,23 @@ +has('user_data')) { + return redirect()->route('login'); + } + + return $next($request); + } +} \ No newline at end of file diff --git a/app/Http/Requests/Auth/LoginRequest.php b/app/Http/Requests/Auth/LoginRequest.php index a3fa4ad..717d73b 100644 --- a/app/Http/Requests/Auth/LoginRequest.php +++ b/app/Http/Requests/Auth/LoginRequest.php @@ -15,7 +15,7 @@ class LoginRequest extends FormRequest /** * Determine if the user is authorized to make this request. */ -public function authorize(): bool + public function authorize(): bool { return true; } @@ -39,7 +39,14 @@ public function authenticate(): void $userArray = collect($allSiswa)->firstWhere('nisn', $inputNisn); if ($userArray && $userArray['password'] === $inputPassword) { + // Simpan ke session session(['user_data' => $userArray]); + + // Set redirect intention berdasarkan role + if (isset($userArray['role']) && $userArray['role'] === 'penjaga perpus') { + session()->put('url.intended', route('admin.dashboard')); + } + RateLimiter::clear($this->throttleKey()); return; } @@ -73,6 +80,6 @@ public function ensureIsNotRateLimited(): void */ public function throttleKey(): string { - return Str::transliterate(Str::lower($this->string('email')).'|'.$this->ip()); + return Str::transliterate(Str::lower($this->string('nisn')).'|'.$this->ip()); } -} +} \ No newline at end of file diff --git a/bootstrap/app.php b/bootstrap/app.php index 9bc6f90..cf1a258 100644 --- a/bootstrap/app.php +++ b/bootstrap/app.php @@ -15,6 +15,7 @@ \App\Http\Middleware\AuthenticateFromSessionData::class, ]); $middleware->alias([ + 'session.auth' => \App\Http\Middleware\SessionAuthMiddleware::class, 'role' => \App\Http\Middleware\CheckRole::class, ]); }) diff --git a/resources/views/admin/dashboard.blade.php b/resources/views/admin/dashboard.blade.php index ddf6fe6..0d5082a 100644 --- a/resources/views/admin/dashboard.blade.php +++ b/resources/views/admin/dashboard.blade.php @@ -124,7 +124,7 @@