Initial commit: Struktur aplikasi ilycats
This commit is contained in:
@@ -0,0 +1,158 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\Role;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class RoleController extends Controller
|
||||
{
|
||||
/**
|
||||
* Menampilkan daftar Role
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$roles = Role::all();
|
||||
// Menambahkan prefix 'pages.' sesuai struktur folder Anda
|
||||
return view('pages.admin.roles.index', compact('roles'));
|
||||
}
|
||||
|
||||
public function create()
|
||||
{
|
||||
// Mengarahkan ke folder pages sesuai standarisasi Anda
|
||||
return view('pages.admin.roles.create');
|
||||
}
|
||||
|
||||
public function store(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'name' => 'required|string|max:255',
|
||||
'slug' => 'required|string|max:255|unique:roles,slug',
|
||||
]);
|
||||
|
||||
$role = Role::create([
|
||||
'name' => $request->name,
|
||||
'slug' => str()->slug($request->slug), // Memastikan format slug benar
|
||||
]);
|
||||
|
||||
// Audit Trail: Mencatat pembuatan role baru dengan menyertakan field 'model'
|
||||
if (class_exists('\App\Models\ActivityLog')) {
|
||||
\App\Models\ActivityLog::create([
|
||||
'user_id' => auth()->id(),
|
||||
'action' => 'CREATE_ROLE',
|
||||
'model' => 'Role', // Ditambahkan untuk memenuhi constraint database
|
||||
'description' => 'Menambahkan role baru: ' . $role->name,
|
||||
]);
|
||||
}
|
||||
|
||||
// Setelah role dibuat, arahkan ke halaman edit untuk mengatur izin modul
|
||||
return redirect()->route('admin.roles.edit', $role->id)
|
||||
->with('success', 'Role berhasil dibuat. Silakan atur hak akses modul.');
|
||||
}
|
||||
|
||||
public function edit($id)
|
||||
{
|
||||
$role = Role::with('permissions')->findOrFail($id);
|
||||
|
||||
/**
|
||||
* Daftar modul disesuaikan dengan Sidebar (image_8b75a1.png)
|
||||
* Menambahkan modul Logistik & Intelligence yang sebelumnya belum terdaftar
|
||||
*/
|
||||
$modules = [
|
||||
// --- OPERASIONAL ---
|
||||
'cats' => 'Data Kucing',
|
||||
'matting' => 'Matting Cat (Breeding)',
|
||||
|
||||
// --- KESEHATAN ---
|
||||
'medical_insights' => 'Medical Insight',
|
||||
'treatments' => 'Rekam Medis',
|
||||
|
||||
// --- LOGISTIK (LENGKAP) ---
|
||||
'medicines' => 'Obat & Vitamin',
|
||||
'foods' => 'Stok Makanan',
|
||||
'supplies' => 'Perlengkapan',
|
||||
'categories' => 'Master Kategori',
|
||||
|
||||
// --- INTELLIGENCE ---
|
||||
'reports' => 'Pusat Laporan',
|
||||
'matting_reports' => 'Laporan Breeding',
|
||||
|
||||
// --- KONFIGURASI ---
|
||||
'users' => 'Manajemen User',
|
||||
'roles' => 'Hak Akses (Role)',
|
||||
'logs' => 'Audit Trail (Log)',
|
||||
'settings' => 'Pengaturan Sistem'
|
||||
];
|
||||
|
||||
// Menambahkan prefix 'pages.'
|
||||
return view('pages.admin.roles.edit', compact('role', 'modules'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Menyimpan/Sync Matriks Permission
|
||||
*/
|
||||
public function update(Request $request, $id)
|
||||
{
|
||||
$role = Role::findOrFail($id);
|
||||
|
||||
DB::transaction(function () use ($request, $role) {
|
||||
// Hapus permission lama (Sync)
|
||||
$role->permissions()->delete();
|
||||
|
||||
// Simpan permission baru jika ada input perms
|
||||
if ($request->has('perms')) {
|
||||
foreach ($request->perms as $moduleSlug => $actions) {
|
||||
$role->permissions()->create([
|
||||
'role_id' => $role->id,
|
||||
'module_slug' => $moduleSlug,
|
||||
'can_read' => isset($actions['read']) ? 1 : 0,
|
||||
'can_create' => isset($actions['create']) ? 1 : 0,
|
||||
'can_update' => isset($actions['update']) ? 1 : 0,
|
||||
'can_delete' => isset($actions['delete']) ? 1 : 0,
|
||||
]);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// Pencatatan Log Audit (Audit Trail) dengan field 'model' agar tidak error
|
||||
if (class_exists('\App\Models\ActivityLog')) {
|
||||
\App\Models\ActivityLog::create([
|
||||
'user_id' => auth()->id(),
|
||||
'action' => 'UPDATE_PERMISSION',
|
||||
'model' => 'Role', // Ditambahkan untuk sinkronisasi database
|
||||
'description' => 'Mengubah hak akses untuk role: ' . $role->name,
|
||||
]);
|
||||
}
|
||||
|
||||
return redirect()->back()->with('success', 'Hak akses ' . $role->name . ' berhasil diperbarui.');
|
||||
}
|
||||
|
||||
public function destroy(Role $role)
|
||||
{
|
||||
// Cek izin di matriks Role Management
|
||||
\Illuminate\Support\Facades\Gate::authorize('check-access', ['roles', 'delete']);
|
||||
|
||||
// Keamanan: Role Admin tidak boleh dihapus
|
||||
if ($role->slug === 'admin') {
|
||||
return back()->with('error', 'Akses Ditolak! Role Administrator utama tidak dapat dihapus.');
|
||||
}
|
||||
|
||||
$roleName = $role->name;
|
||||
|
||||
// Audit Trail
|
||||
if (class_exists('\App\Models\ActivityLog')) {
|
||||
\App\Models\ActivityLog::create([
|
||||
'user_id' => auth()->id(),
|
||||
'action' => 'DELETED_ROLE',
|
||||
'model' => 'Role',
|
||||
'description' => "Menghapus role: $roleName",
|
||||
]);
|
||||
}
|
||||
|
||||
$role->delete();
|
||||
|
||||
return redirect()->route('admin.roles.index')->with('success', "Role $roleName berhasil dihapus.");
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user