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

103 lines
3.2 KiB
PHP

<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Http\Requests\RoleRequest;
use Spatie\Permission\Models\Permission;
use Spatie\Permission\Models\Role;
class RoleController extends Controller
{
public function index()
{
$roles = Role::with('permissions')
->latest()
->paginate(10);
// Kembalikan data ke komponen Inertia 'Admin/Roles/Index'
return inertia('Admin/Roles/Index', compact('roles'));
}
public function create()
{
// Ambil semua permission
$permissions = Permission::all();
// Kembalikan ke Inertia 'Admin/Roles/Create' dengan data permissions
return inertia('Admin/Roles/Create', [
'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('Admin/Roles/Edit', [
'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.');
}
}