user()->can('pengguna.urus'), 403); $users = User::with('roles') ->when($request->filled('cari'), fn ($q) => $q->where('name', 'like', '%'.$request->cari.'%')->orWhere('email', 'like', '%'.$request->cari.'%')) ->orderBy('name')->paginate(15)->withQueryString(); return view('users.index', compact('users')); } public function create() { abort_unless(auth()->user()->can('pengguna.urus'), 403); return view('users.create', ['user' => new User, 'roles' => Role::orderBy('name')->get()]); } public function store(Request $request) { abort_unless(auth()->user()->can('pengguna.urus'), 403); $data = $request->validate([ 'name' => ['required', 'string', 'max:255'], 'email' => ['required', 'email', 'max:255', Rule::unique('users', 'email')], 'phone' => ['nullable', 'string', 'max:50'], 'jawatan' => ['nullable', 'string', 'max:255'], 'password' => ['required', 'confirmed', Password::min(8)], 'role' => ['required', 'exists:roles,name'], 'is_active' => ['nullable', 'boolean'], ]); $user = User::create([ 'name' => $data['name'], 'email' => $data['email'], 'phone' => $data['phone'] ?? null, 'jawatan' => $data['jawatan'] ?? null, 'password' => Hash::make($data['password']), 'is_active' => $request->boolean('is_active'), 'email_verified_at' => now(), ]); $user->syncRoles([$data['role']]); return redirect()->route('users.index')->with('success', 'Pengguna dicipta.'); } public function edit(User $user) { abort_unless(auth()->user()->can('pengguna.urus'), 403); return view('users.edit', ['user' => $user, 'roles' => Role::orderBy('name')->get()]); } public function update(Request $request, User $user) { abort_unless(auth()->user()->can('pengguna.urus'), 403); $data = $request->validate([ 'name' => ['required', 'string', 'max:255'], 'email' => ['required', 'email', 'max:255', Rule::unique('users', 'email')->ignore($user->id)], 'phone' => ['nullable', 'string', 'max:50'], 'jawatan' => ['nullable', 'string', 'max:255'], 'password' => ['nullable', 'confirmed', Password::min(8)], 'role' => ['required', 'exists:roles,name'], 'is_active' => ['nullable', 'boolean'], ]); $user->update([ 'name' => $data['name'], 'email' => $data['email'], 'phone' => $data['phone'] ?? null, 'jawatan' => $data['jawatan'] ?? null, 'is_active' => $request->boolean('is_active'), ]); if (! empty($data['password'])) { $user->update(['password' => Hash::make($data['password'])]); } $user->syncRoles([$data['role']]); return redirect()->route('users.index')->with('success', 'Pengguna dikemas kini.'); } public function destroy(User $user) { abort_unless(auth()->user()->can('pengguna.urus'), 403); abort_if($user->id === auth()->id(), 403, 'Anda tidak boleh memadam akaun sendiri.'); $user->delete(); return redirect()->route('users.index')->with('success', 'Pengguna dipadam.'); } }