refactor: admin route, fix error chart dashboard admin
This commit is contained in:
parent
6455f0cc06
commit
efad6eb423
|
|
@ -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('/');
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Closure;
|
||||
use Illuminate\Http\Request;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
|
||||
class SessionAuthMiddleware
|
||||
{
|
||||
/**
|
||||
* Handle an incoming request.
|
||||
*/
|
||||
public function handle(Request $request, Closure $next): Response
|
||||
{
|
||||
// Cek apakah user_data ada di session
|
||||
if (!session()->has('user_data')) {
|
||||
return redirect()->route('login');
|
||||
}
|
||||
|
||||
return $next($request);
|
||||
}
|
||||
}
|
||||
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -15,6 +15,7 @@
|
|||
\App\Http\Middleware\AuthenticateFromSessionData::class,
|
||||
]);
|
||||
$middleware->alias([
|
||||
'session.auth' => \App\Http\Middleware\SessionAuthMiddleware::class,
|
||||
'role' => \App\Http\Middleware\CheckRole::class,
|
||||
]);
|
||||
})
|
||||
|
|
|
|||
|
|
@ -124,7 +124,7 @@
|
|||
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
|
||||
<script>
|
||||
// Script untuk menginisialisasi chart di dashboard admin
|
||||
document.addEventListener('turbo:load', function() {
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
if (window.myBarChart) window.myBarChart.destroy();
|
||||
if (window.myDonutChart) window.myDonutChart.destroy();
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
<aside id="sidebar" class="sidebar bg-white">
|
||||
<div class="sidebar-header d-flex justify-content-between align-items-center px-3 py-3 py-md-2">
|
||||
<a href="{{ Auth::user()->role == 'penjaga perpus' ? route('admin.dashboard') : route('dashboard') }}"
|
||||
<a href="{{ session('user_data.role') == 'penjaga perpus' ? route('admin.dashboard') : route('dashboard') }}"
|
||||
class="d-flex align-items-center text-decoration-none" style="gap: 0.75rem;">
|
||||
<img src="{{ asset('images/logo/icon.svg') }}" alt="Ikon Perpus" style="height: 32px;" class="mt-md-2">
|
||||
|
||||
|
|
@ -17,11 +17,11 @@ class="sidebar-title">
|
|||
|
||||
<ul class="nav flex-column px-2 mt-2">
|
||||
|
||||
@if (Auth::user()->role == 'penjaga perpus')
|
||||
@if (session('user_data.role') == 'penjaga perpus')
|
||||
{{-- Menu untuk Penjaga Perpus --}}
|
||||
<li class="nav-item">
|
||||
<a href="{{ route('admin.dashboard') }}"
|
||||
class="nav-link {{ request()->routeIs('admin.dashboard.*') ? 'active' : '' }}">
|
||||
class="nav-link {{ request()->routeIs('admin.dashboard') ? 'active' : '' }}">
|
||||
<i class="bi bi-grid-1x2-fill"></i><span class="nav-text ms-2">Dashboard</span>
|
||||
</a>
|
||||
</li>
|
||||
|
|
@ -95,4 +95,4 @@ class="nav-link {{ request()->routeIs('baca.*') ? 'active' : '' }}">
|
|||
</li>
|
||||
@endif
|
||||
</ul>
|
||||
</aside>
|
||||
</aside>
|
||||
|
|
@ -7,7 +7,6 @@
|
|||
use App\Http\Controllers\BacaOnlineController;
|
||||
use App\Http\Controllers\RiwayatController;
|
||||
use App\Http\Controllers\ProfileController;
|
||||
// Import Controller Admin
|
||||
use App\Http\Controllers\Admin\DashboardController as AdminDashboardController;
|
||||
use App\Http\Controllers\Admin\BookController as AdminBookController;
|
||||
use App\Http\Controllers\Admin\PengumumanController;
|
||||
|
|
@ -17,8 +16,8 @@
|
|||
return view('welcome');
|
||||
});
|
||||
|
||||
// --- RUTE UNTUK PENGGUNA TERAUTENTIKASI (SISWA & PENJAGA) ---
|
||||
Route::middleware(['auth'])->group(function () {
|
||||
// --- RUTE UNTUK PENGGUNA TERAUTENTIKASI (SISWA & PENJAGA PERPUS) ---
|
||||
Route::middleware(['session.auth'])->group(function () {
|
||||
Route::get('/dashboard', [DashboardController::class, 'index'])->name('dashboard');
|
||||
Route::get('/katalog', [KatalogController::class, 'index'])->name('katalog.index');
|
||||
|
||||
|
|
@ -52,12 +51,12 @@
|
|||
});
|
||||
|
||||
// --- GRUP RUTE KHUSUS UNTUK ADMIN / PENJAGA PERPUSTAKAAN ---
|
||||
Route::middleware(['auth', 'role:penjaga perpus'])->prefix('admin')->name('admin.')->group(function () {
|
||||
Route::middleware(['session.auth', 'role:penjaga perpus'])->prefix('admin')->name('admin.')->group(function () {
|
||||
Route::get('/dashboard', [AdminDashboardController::class, 'index'])->name('dashboard');
|
||||
Route::get('/buku', [AdminBookController::class, 'index'])->name('buku.index');
|
||||
Route::get('/buku/tambah', [AdminBookController::class, 'create'])->name('buku.create');
|
||||
Route::get('/pengguna', [AdminUserController::class, 'index'])->name('pengguna.index');
|
||||
Route::get('/pengumuman', [PengumumanController::class, 'index'])->name('pengumuman.index'); // <-- RUTE BARU
|
||||
Route::get('/pengumuman', [PengumumanController::class, 'index'])->name('pengumuman.index');
|
||||
});
|
||||
|
||||
require __DIR__ . '/auth.php';
|
||||
Loading…
Reference in New Issue