103 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			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.');
 | |
|     }
 | |
| }
 |