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 @@