parseDataTableQuery($request); return Inertia::render('admin/system/roles/Index', [ 'roles' => $this->roleService->paginateForIndex($tableQuery), 'filters' => $this->dataTableFilters($tableQuery), ]); } public function create(): Response { $permissions = collect(PermissionEnum::cases()) ->map(fn (PermissionEnum $permission) => [ 'value' => $permission->value, 'label' => $permission->label(), 'group' => $permission->group(), ]) ->values() ->all(); return Inertia::render('admin/system/roles/Create', [ 'permissions' => $permissions, ]); } public function store(RoleRequest $request): RedirectResponse { $this->roleService->create($request->validated()); $this->flashCreated('Role'); return redirect()->route('admin.system.roles.index'); } public function edit(Role $role): Response { $role->load('permissions'); $permissions = collect(PermissionEnum::cases()) ->map(fn (PermissionEnum $permission) => [ 'value' => $permission->value, 'label' => $permission->label(), 'group' => $permission->group(), ]) ->values() ->all(); // Check if role is developer or owner to protect it $isProtected = in_array($role->name, [EnumsRole::DEVELOPER->value, EnumsRole::OWNER->value], true); return Inertia::render('admin/system/roles/Edit', [ 'role' => [ 'id' => $role->id, 'name' => $role->name, 'permission_names' => $role->permissions->pluck('name')->all(), ], 'permissions' => $permissions, 'isProtected' => $isProtected, ]); } public function update(RoleRequest $request, Role $role): RedirectResponse { $this->roleService->update($role, $request->validated()); $this->flashUpdated('Role'); return redirect()->route('admin.system.roles.index'); } public function destroy(Role $role): RedirectResponse { try { $this->roleService->delete($role); $this->flashDeleted('Role'); } catch (\InvalidArgumentException $exception) { $this->flashError($exception->getMessage()); } return redirect()->route('admin.system.roles.index'); } }