authorize('viewAny', User::class); $users = User::query()->withCount('vms')->orderBy('name')->paginate(20); return view('users.index', compact('users')); } public function create(): View { $this->authorize('create', User::class); return view('users.create', ['roles' => UserRole::cases()]); } public function store(Request $request): RedirectResponse { $this->authorize('create', User::class); $data = $request->validate([ 'name' => ['required', 'string', 'max:100'], 'email' => ['required', 'email', 'max:255', 'unique:users,email'], 'password' => ['required', 'confirmed', Password::defaults()], 'role' => ['required', Rule::enum(UserRole::class)], 'is_active' => ['boolean'], ]); User::query()->create([ 'name' => $data['name'], 'email' => $data['email'], 'password' => Hash::make($data['password']), 'role' => $data['role'], 'is_active' => $request->boolean('is_active', true), ]); return redirect()->route('users.index')->with('success', 'Benutzer erstellt.'); } public function edit(User $user): View { $this->authorize('update', $user); return view('users.edit', [ 'user' => $user, 'roles' => UserRole::cases(), ]); } public function update(Request $request, User $user): RedirectResponse { $this->authorize('update', $user); $data = $request->validate([ 'name' => ['required', 'string', 'max:100'], 'email' => ['required', 'email', 'max:255', Rule::unique('users')->ignore($user->id)], 'password' => ['nullable', 'confirmed', Password::defaults()], 'role' => ['required', Rule::enum(UserRole::class)], 'is_active' => ['boolean'], ]); $user->fill([ 'name' => $data['name'], 'email' => $data['email'], 'role' => $data['role'], 'is_active' => $request->boolean('is_active'), ]); if (! empty($data['password'])) { $user->password = Hash::make($data['password']); } $user->save(); return redirect()->route('users.index')->with('success', 'Benutzer aktualisiert.'); } public function destroy(User $user): RedirectResponse { $this->authorize('delete', $user); if ($user->vms()->whereIn('status', ['pending', 'active'])->exists()) { return back()->withErrors(['user' => 'Benutzer hat noch aktive VMs.']); } $user->delete(); return redirect()->route('users.index')->with('success', 'Benutzer gelöscht.'); } }