116 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			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.');
 | 
						|
    }
 | 
						|
}
 |