roleService = $roleService; // $this->middleware('auth:web'); } public function index(): Response { $roles = $this->roleService->getAllRoles(); return Inertia::render('management/roles/index', [ 'roles' => $roles['data'], ]); } // public function create(): Response // { // $permissions = Permission::all()->mapWithKeys(fn (Permission $permission) => [ // $permission->name => false, // ]); // return Inertia::render('Admin/UserManagement/Role/Create', [ // 'permissions' => Arr::undot($permissions), // ]); // } // public function store(Request $request): RedirectResponse // { // $request->validate([ // 'name' => ['required', 'string'], // 'permissions' => ['required', 'array'], // ]); // $permissions = Arr::dot($request->permissions); // $permissions = array_keys(array_filter($permissions, fn ($permission) => $permission === true)); // $role = Role::create([ // 'name' => $request->name, // ]); // $role->syncPermissions($permissions); // return redirect() // ->route('admin.user_management.role.index') // ->with('message-info', 'Role ' . $role->name . ' has created successfully.'); // } public function edit(int $id): Response { $role = Role::findOrFail($id); // 1. Get all permissions with their "checked" state $permissions = Permission::all()->map(function ($permission) use ($role) { return [ 'id' => $permission->id, 'name' => $permission->name, // e.g. "user.create" 'description' => $permission->description, 'checked' => $role->hasPermissionTo($permission->name), ]; }); // 2. Group them by the prefix (the part before the dot) $grouped = $permissions->groupBy(function ($item) { return explode('.', $item['name'])[0]; })->map(function ($group) { // 3. Force it to be a sequential array so JS sees it as [] return $group->values()->toArray(); }); return Inertia::render('management/roles/edit', [ 'role' => $role, 'permissions' => $grouped, ]); } public function update(int $id, Request $request): RedirectResponse { $role = Role::findOrFail($id); $request->validate([ 'name' => ['required', 'string'], 'permissions' => ['required', 'array'], ]); // 1. Extract only the IDs of permissions that are checked $permissionIds = []; foreach ($request->permissions as $group => $items) { foreach ($items as $permission) { if (! empty($permission['checked'])) { $permissionIds[] = $permission['id']; } } } // 2. Update Role name $role->update([ 'name' => $request->name ]); // 3. Sync permissions using the collected IDs $role->syncPermissions($permissionIds); return redirect() ->route('management.roles.index') ->with('message-info', 'Role '.$role->name.' has updated successfully.'); } // public function destroy(int $id): RedirectResponse // { // $role = Role::findOrFail($id); // if ($role->name == 'Admin') { // return redirect() // ->route('user_management.user.index') // ->with('message-error', 'User ' . $role->name . ' cannot be delete.'); // } // $role->delete(); // return redirect() // ->route('admin.user_management.role.index') // ->with('message-info', 'Role has deleted successfully.'); // } }