sidebar + middleware
This commit is contained in:
parent
e28efe700b
commit
03fa985785
|
|
@ -64,5 +64,6 @@ class Kernel extends HttpKernel
|
||||||
'signed' => \App\Http\Middleware\ValidateSignature::class,
|
'signed' => \App\Http\Middleware\ValidateSignature::class,
|
||||||
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
|
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
|
||||||
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
|
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
|
||||||
|
'checkrole' => \App\Http\Middleware\CheckRole::class,
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,34 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Middleware;
|
||||||
|
|
||||||
|
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
|
||||||
|
{
|
||||||
|
if (!Auth::check()) {
|
||||||
|
return redirect('login');
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2. Ambil nama role user yang sedang login (lewat relasi yang kita buat kemarin)
|
||||||
|
$userRole = Auth::user()->role->nama_role;
|
||||||
|
|
||||||
|
// 3. Cek apakah role user ada di dalam daftar role yang diperbolehkan?
|
||||||
|
if (in_array($userRole, $roles)) {
|
||||||
|
return $next($request);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 4. Kalau nggak cocok, lempar ke halaman 403 (Forbidden)
|
||||||
|
abort(403, 'Akses Ditolak. Anda tidak memiliki wewenang untuk mengakses halaman ini.');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,130 +1,104 @@
|
||||||
<aside id="sidebar" class="sidebar">
|
<aside id="sidebar" class="sidebar">
|
||||||
|
|
||||||
<ul class="sidebar-nav" id="sidebar-nav">
|
<ul class="sidebar-nav" id="sidebar-nav">
|
||||||
|
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a class="nav-link " href="index.html">
|
<a class="nav-link {{ request()->routeIs('dashboard') ? '' : 'collapsed' }}" href="{{ route('dashboard') }}">
|
||||||
<i class="bi bi-grid"></i>
|
<i class="bi bi-grid"></i>
|
||||||
<span>Dashboard</span>
|
<span>Dashboard</span>
|
||||||
</a>
|
|
||||||
</li><!-- End Dashboard Nav -->
|
|
||||||
|
|
||||||
<li class="nav-item">
|
|
||||||
<a class="nav-link collapsed" data-bs-target="#anggota-nav" data-bs-toggle="collapse" href="#">
|
|
||||||
<i class="bi bi-gem"></i><span>Manajemen Anggota</span><i class="bi bi-chevron-down ms-auto"></i>
|
|
||||||
</a>
|
|
||||||
<ul id="anggota-nav" class="nav-content collapse " data-bs-parent="#sidebar-nav">
|
|
||||||
<li>
|
|
||||||
<a href="icons-bootstrap.html">
|
|
||||||
<i class="bi bi-circle"></i><span>Data Pelatih</span>
|
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
|
||||||
<a href="icons-remix.html">
|
|
||||||
<i class="bi bi-circle"></i><span>Data Anggota</span>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a href="icons-remix.html">
|
|
||||||
<i class="bi bi-circle"></i><span>Data Kolat</span>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</li> {{-- End Manajemen Anggota --}}
|
|
||||||
|
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a class="nav-link collapsed" data-bs-target="#latihan-nav" data-bs-toggle="collapse" href="#">
|
<a class="nav-link {{ request()->routeIs(['pelatih.*', 'anggota.*', 'kolat.*']) ? '' : 'collapsed' }}"
|
||||||
<i class="bi bi-gem"></i><span>Manajemen Latihan</span><i class="bi bi-chevron-down ms-auto"></i>
|
data-bs-target="#anggota-nav" data-bs-toggle="collapse" href="#" aria-expanded="{{ request()->routeIs(['pelatih.*', 'anggota.*', 'kolat.*']) ? 'true' : 'false' }}">
|
||||||
</a>
|
<i class="bi bi-people"></i><span>Manajemen Anggota</span><i class="bi bi-chevron-down ms-auto"></i>
|
||||||
<ul id="latihan-nav" class="nav-content collapse " data-bs-parent="#sidebar-nav">
|
|
||||||
<li>
|
|
||||||
<a href="icons-bootstrap.html">
|
|
||||||
<i class="bi bi-circle"></i><span>Presensi</span>
|
|
||||||
</a>
|
</a>
|
||||||
</li>
|
<ul id="anggota-nav" class="nav-content collapse {{ request()->routeIs(['pelatih.*', 'anggota.*', 'kolat.*']) ? 'show' : '' }}" data-bs-parent="#sidebar-nav">
|
||||||
<li>
|
<li>
|
||||||
<a href="icons-remix.html">
|
<a href="{{ route('pelatih.index') }}" class="{{ request()->routeIs('pelatih.*') ? 'active' : '' }}">
|
||||||
<i class="bi bi-circle"></i><span>Jadwal & Pengumuman</span>
|
<i class="bi bi-circle"></i><span>Data Pelatih</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="{{ route('anggota.anggota') }}" class="{{ request()->routeIs('anggota.*') ? 'active' : '' }}">
|
||||||
|
<i class="bi bi-circle"></i><span>Data Anggota</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="{{ route('kolat.index') }}" class="{{ request()->routeIs('kolat.*') ? 'active' : '' }}">
|
||||||
|
<i class="bi bi-circle"></i><span>Data Kolat</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link {{ request()->routeIs(['presensi.*', 'jadwal.*']) ? '' : 'collapsed' }}"
|
||||||
|
data-bs-target="#latihan-nav" data-bs-toggle="collapse" href="#" aria-expanded="{{ request()->routeIs(['presensi.*', 'jadwal.*']) ? 'true' : 'false' }}">
|
||||||
|
<i class="bi bi-journal-check"></i><span>Manajemen Latihan</span><i class="bi bi-chevron-down ms-auto"></i>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
<ul id="latihan-nav" class="nav-content collapse {{ request()->routeIs(['presensi.*', 'jadwal.*']) ? 'show' : '' }}" data-bs-parent="#sidebar-nav">
|
||||||
<li>
|
<li>
|
||||||
<a href="icons-remix.html">
|
<a href="{{ route('presensi.index') }}" class="{{ request()->routeIs('presensi.*') ? 'active' : '' }}">
|
||||||
<i class="bi bi-circle"></i><span>Penilaian Pelatih</span>
|
<i class="bi bi-circle"></i><span>Presensi</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="{{ route('jadwal.index') }}" class="{{ request()->routeIs('jadwal.*') ? 'active' : '' }}">
|
||||||
|
<i class="bi bi-circle"></i><span>Jadwal & Pengumuman</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="#"><i class="bi bi-circle"></i><span>Penilaian Pelatih</span></a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link collapsed" data-bs-target="#transaksi-nav" data-bs-toggle="collapse" href="#">
|
||||||
|
<i class="bi bi-wallet2"></i><span>Transaksi</span><i class="bi bi-chevron-down ms-auto"></i>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
<ul id="transaksi-nav" class="nav-content collapse" data-bs-parent="#sidebar-nav">
|
||||||
</ul>
|
<li><a href="#"><i class="bi bi-circle"></i><span>Kas Cabang</span></a></li>
|
||||||
</li> {{-- End Manajemen Latihan --}}
|
<li><a href="#"><i class="bi bi-circle"></i><span>SPP Anggota</span></a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a class="nav-link collapsed" data-bs-target="#transaksi-nav" data-bs-toggle="collapse" href="#">
|
<a class="nav-link collapsed" data-bs-target="#laporan-nav" data-bs-toggle="collapse" href="#">
|
||||||
<i class="bi bi-gem"></i><span>Transaksi</span><i class="bi bi-chevron-down ms-auto"></i>
|
<i class="bi bi-file-earmark-bar-graph"></i><span>Laporan</span><i class="bi bi-chevron-down ms-auto"></i>
|
||||||
</a>
|
|
||||||
<ul id="transaksi-nav" class="nav-content collapse " data-bs-parent="#sidebar-nav">
|
|
||||||
<li>
|
|
||||||
<a href="icons-bootstrap.html">
|
|
||||||
<i class="bi bi-circle"></i><span>Kas Cabang</span>
|
|
||||||
</a>
|
</a>
|
||||||
</li>
|
<ul id="laporan-nav" class="nav-content collapse" data-bs-parent="#sidebar-nav">
|
||||||
<li>
|
<li><a href="#"><i class="bi bi-circle"></i><span>Laporan Anggota</span></a></li>
|
||||||
<a href="icons-remix.html">
|
<li><a href="#"><i class="bi bi-circle"></i><span>Laporan Keuangan</span></a></li>
|
||||||
<i class="bi bi-circle"></i><span>SPP Anggota</span>
|
<li><a href="#"><i class="bi bi-circle"></i><span>Laporan Presensi</span></a></li>
|
||||||
|
<li><a href="#"><i class="bi bi-circle"></i><span>Laporan Penilaian</span></a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li class="nav-heading">Akun</li>
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link collapsed" href="#"><i class="bi bi-person"></i><span>Profile</span></a>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item">
|
||||||
|
<form id="logout-form" action="{{ route('logout') }}" method="POST" style="display: none;">@csrf</form>
|
||||||
|
<a class="nav-link collapsed" href="#" onclick="event.preventDefault(); document.getElementById('logout-form').submit();">
|
||||||
|
<i class="bi bi-box-arrow-right"></i><span>Logout</span>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
|
||||||
</li> {{-- End transaksi --}}
|
|
||||||
|
|
||||||
<li class="nav-item">
|
|
||||||
<a class="nav-link collapsed" data-bs-target="#laporan-nav" data-bs-toggle="collapse" href="#">
|
|
||||||
<i class="bi bi-gem"></i><span>Laporan</span><i class="bi bi-chevron-down ms-auto"></i>
|
|
||||||
</a>
|
|
||||||
<ul id="laporan-nav" class="nav-content collapse " data-bs-parent="#sidebar-nav">
|
|
||||||
<li>
|
|
||||||
<a href="icons-bootstrap.html">
|
|
||||||
<i class="bi bi-circle"></i><span>Laporan Anggota</span>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a href="icons-remix.html">
|
|
||||||
<i class="bi bi-circle"></i><span>Laporan Keuangan</span>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<a href="icons-remix.html">
|
|
||||||
<i class="bi bi-circle"></i><span>Laporan Presensi</span>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<a href="icons-remix.html">
|
|
||||||
<i class="bi bi-circle"></i><span>Laporan Penialaian</span>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</li>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<li class="nav-heading">Pages</li>
|
|
||||||
|
|
||||||
<li class="nav-item">
|
|
||||||
<a class="nav-link collapsed" href="users-profile.html">
|
|
||||||
<i class="bi bi-person"></i>
|
|
||||||
<span>Profile</span>
|
|
||||||
</a>
|
|
||||||
</li><!-- End Profile Page Nav -->
|
|
||||||
|
|
||||||
<li class="nav-item">
|
|
||||||
<a class="nav-link collapsed" href="pages-login.html">
|
|
||||||
<i class="bi bi-box-arrow-in-right"></i>
|
|
||||||
<span>Login</span>
|
|
||||||
</a>
|
|
||||||
</li><!-- End Login Page Nav -->
|
|
||||||
|
|
||||||
<li class="nav-item">
|
|
||||||
<a class="nav-link collapsed" href="pages-error-404.html">
|
|
||||||
<i class="bi bi-dash-circle"></i>
|
|
||||||
<span>Error 404</span>
|
|
||||||
</a>
|
|
||||||
</li><!-- End Error 404 Page Nav -->
|
|
||||||
|
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
|
</aside>
|
||||||
|
|
||||||
</aside>
|
{{-- SCRIPT PENTING: Supaya menu yang otomatis terbuka BISA DITUTUP KEMBALI --}}
|
||||||
|
<script>
|
||||||
|
document.addEventListener("DOMContentLoaded", function() {
|
||||||
|
// Cari semua dropdown yang punya class 'show' (dibuka otomatis oleh Laravel)
|
||||||
|
var bootstrapCollapseMenus = document.querySelectorAll('.nav-content.collapse.show');
|
||||||
|
|
||||||
|
bootstrapCollapseMenus.forEach(function (menuElement) {
|
||||||
|
// Kita kasih tahu Bootstrap secara manual: "Woi, ini menu udah kebuka!"
|
||||||
|
// Dengan inisialisasi ini, klik berikutnya akan menjalankan fungsi 'hide'
|
||||||
|
new bootstrap.Collapse(menuElement, {
|
||||||
|
toggle: false
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue