skl/app/Http/Controllers/Admin/RoleController.php

116 lines
3.7 KiB
PHP

<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Http\Requests\RoleRequest;
use Illuminate\Support\Facades\Log;
use Inertia\Inertia;
use Spatie\Permission\Models\Permission;
use Spatie\Permission\Models\Role;
class RoleController extends Controller
{
public function __invoke(Request $request)
{
try {
$kategori = Role::latest()->get();
return Inertia::render('admin/kategori/index_kategori', ['kategori' => $kategori]);
} catch (\Exception $e) {
Log::error('Error fetching Kategori: ' . $e->getMessage());
return back()->with('error', 'Something went wrong.');
}
}
public function index()
{
$roles = Role::with('permissions')
->latest()
->paginate(10);
// Kembalikan data ke komponen Inertia 'Admin/Roles/Index'
return Inertia::render('admin/roles/index_roles', compact('roles'));
}
public function create()
{
// Ambil semua permission
$permissions = Permission::all();
// Kembalikan ke Inertia 'Admin/Roles/Create' dengan data permissions
return Inertia::render('admin/roles/create_roles', [
'permissions' => $permissions,
]);
}
public function store(RoleRequest $request)
{
// Validasi data input melalui RoleRequest
$validatedData = $request->validated();
// Buat role baru dengan data yang telah divalidasi
$role = Role::create($validatedData);
// Tetapkan permissions pada role yang baru dibuat
$role->syncPermissions($request->input('permissions'));
// Jika berhasil simpan, arahkan dengan pesan sukses, jika gagal dengan pesan error
if ($role) {
return redirect()->route('admin.roles.index')->with(['success' => 'Data Berhasil Disimpan!']);
} else {
return redirect()->route('admin.roles.index')->with(['error' => 'Data Gagal Disimpan!']);
}
}
public function edit(Role $role)
{
// Ambil semua permission, diurutkan dari yang terbaru
$permissions = Permission::latest()->get();
// Ambil ID dari permissions yang dimiliki oleh role saat ini
$rolePermissions = $role->permissions->pluck('id')->toArray();
// Map permissions agar hanya menyertakan 'id' dan 'name'
$permissions = $permissions->map(function ($permission) {
return [
'id' => $permission->id,
'name' => $permission->name,
];
});
// Kembalikan data ke Inertia 'Admin/Roles/Edit' dengan data role, permissions, dan rolePermissions
return Inertia::render('admin/roles/edit_roles', [
'permissions' => $permissions,
'role' => $role,
'rolePermissions' => $rolePermissions,
]);
}
public function update(RoleRequest $request, Role $role)
{
// Update data role dengan data yang telah divalidasi
$role->name = $request->name;
// Sync permissions
$role->permissions()->sync($request->permissions);
// Simpan perubahan
$role->save();
// Arahkan kembali ke daftar role
return redirect()->route('admin.roles.index')->with('success', 'Role updated successfully.');
}
public function destroy($id)
{
// Cari role berdasarkan ID, error jika tidak ditemukan
$role = Role::findOrFail($id);
// Hapus role dari database
$role->delete();
// Arahkan kembali dengan pesan bahwa role berhasil dihapus
return redirect()->route('admin.roles.index')->with('message', 'Role deleted successfully.');
}
}