ensureAdmin(); return view('users.index', [ 'users' => User::orderBy('name')->get(), ]); } public function store(Request $request): RedirectResponse { $this->ensureAdmin(); $validated = $request->validate([ 'name' => ['required', 'string', 'max:255'], 'email' => ['required', 'email', 'max:255', 'unique:users,email'], 'password' => ['required', 'string', 'min:6'], 'role' => ['required', 'in:admin,owner'], ]); User::create([ 'name' => $validated['name'], 'email' => $validated['email'], 'password' => Hash::make($validated['password']), 'role' => $validated['role'], ]); return redirect()->route('users.index')->with('success', 'User baru berhasil ditambahkan.'); } public function update(Request $request, User $user): RedirectResponse { $this->ensureAdmin(); $validated = $request->validate([ 'name' => ['required', 'string', 'max:255'], 'email' => ['required', 'email', 'max:255', 'unique:users,email,' . $user->id], 'role' => ['required', 'in:admin,owner'], 'password' => ['nullable', 'string', 'min:6'], ]); $payload = [ 'name' => $validated['name'], 'email' => $validated['email'], 'role' => $validated['role'], ]; if (!empty($validated['password'])) { $payload['password'] = Hash::make($validated['password']); } $user->update($payload); return redirect()->route('users.index')->with('success', 'Data user berhasil diperbarui.'); } public function destroy(User $user): RedirectResponse { $this->ensureAdmin(); if ((int) $user->id === (int) auth()->id()) { return redirect()->route('users.index')->withErrors(['error' => 'Akun yang sedang login tidak bisa dihapus.']); } $user->delete(); return redirect()->route('users.index')->with('success', 'User berhasil dihapus.'); } private function ensureAdmin(): void { abort_unless(auth()->user()?->role === 'admin', 403); } }