role !== 'pemilik') { abort(403); } return $next($request); }), ]; } /** * Display a listing of the resource. */ public function index() { $admin = User::where('role', '!=', 'pemilik') ->latest() ->get(); // 2. Kirim data ($buket) ke view return view('admin.kelola-admin.index', compact('admin')); } // --- Bagian STORE --- public function store(Request $request) { $validator = Validator::make($request->all(), [ 'nama' => 'required|string|min:5|max:100', 'username' => 'required|string|alpha_dash|max:50|unique:users,username', 'email' => 'required|email:dns|max:255|unique:users,email,', 'no_wa' => 'required|numeric|digits_between:10,15', 'role' => 'required|in:admin_foto,admin_buket', 'alamat' => 'required|string|max:255', ], [ // Detail Pesan Menggunakan :attribute 'required' => 'Kolom :attribute wajib diisi.', 'unique' => ':attribute sudah terdaftar di sistem, gunakan yang lain.', 'min' => ':attribute minimal harus berisi :min karakter.', 'max' => ':attribute maksimal hanya boleh :max karakter.', 'numeric' => ':attribute harus berupa angka.', 'digits_between' => ':attribute harus berjumlah antara :min sampai :max digit.', 'email' => 'Format :attribute tidak valid.', 'alpha_dash' => ':attribute hanya boleh berisi huruf, angka, serta simbol - dan _', 'in' => ':attribute yang dipilih tidak sesuai dengan pilihan yang tersedia.', ], [ // Alias untuk :attribute agar pesan lebih rapi dibaca 'nama' => 'nama lengkap', 'username' => 'username', 'email' => 'alamat email', 'no_wa' => 'nomor WA', 'role' => 'peran admin', 'alamat' => 'alamat lengkap', ]); if ($validator->fails()) { return redirect()->back() ->withErrors($validator) ->withInput() ->with('error_modal', 'create'); } User::create([ 'nama' => $request->nama, 'username' => $request->username, 'email' => $request->email, 'no_wa' => $request->no_wa, 'role' => $request->role, 'alamat' => $request->alamat, 'password' => Hash::make($request->username), ]); return redirect()->back()->with('success', 'Admin berhasil ditambahkan!'); } // --- Bagian UPDATE --- public function update(Request $request, string $id) { $admin = User::findOrFail($id); $validator = Validator::make($request->all(), [ 'nama' => 'required|string|min:5|max:100', 'username' => 'required|string|alpha_dash|max:50|unique:users,username,' . $id . ',id_user', 'email' => 'required|email:dns|max:255|unique:users,email,' . $id . ',id_user', 'no_wa' => 'required|numeric|digits_between:10,15', 'role' => 'required|in:admin_foto,admin_buket', 'alamat' => 'required|string|max:255', ], [ // Detail Pesan Menggunakan :attribute 'required' => 'Kolom :attribute wajib diisi.', 'unique' => ':attribute sudah terdaftar di sistem, gunakan yang lain.', 'min' => ':attribute minimal harus berisi :min karakter.', 'max' => ':attribute maksimal hanya boleh :max karakter.', 'numeric' => ':attribute harus berupa angka.', 'digits_between' => ':attribute harus berjumlah antara :min sampai :max digit.', 'email' => 'Format :attribute tidak valid.', 'alpha_dash' => ':attribute hanya boleh berisi huruf, angka, serta simbol - dan _', 'in' => ':attribute yang dipilih tidak sesuai dengan pilihan yang tersedia.', ], [ // Alias untuk :attribute agar pesan lebih rapi dibaca 'nama' => 'nama lengkap', 'username' => 'username', 'email' => 'alamat email', 'no_wa' => 'nomor WA', 'role' => 'peran admin', 'alamat' => 'alamat lengkap', ]); if ($validator->fails()) { return redirect()->back() ->withErrors($validator) ->withInput() ->with('error_id', $id); } // Menggunakan update hanya pada kolom yang diizinkan (mencegah injeksi role owner) $admin->update($request->only(['nama', 'username', 'email', 'no_wa', 'role', 'alamat'])); return redirect()->back()->with('success', 'Data berhasil diperbarui!'); } public function destroy(string $id) { // 1. Cari data admin berdasarkan ID $admin = User::findOrFail($id); // 2. Keamanan tambahan: Jangan biarkan admin menghapus dirinya sendiri (opsional) if (Auth::id() == $admin->id_user) { return redirect()->back()->with('error', 'Anda tidak bisa menghapus akun sendiri!'); } // 3. Eksekusi hapus $admin->delete(); // 4. Kembali dengan pesan sukses return redirect()->route('admin.kelola-admin.index') ->with('success', 'Admin berhasil dihapus secara permanen.'); } }