middleware('permission:view-amministratori', ['only' => ['index']]); // Permesso per visualizzare la lista $this->middleware('permission:manage-amministratori', ['except' => ['index']]); // Permesso per tutte le altre azioni CRUD } /** * Display a listing of the resource. */ public function index() { // Gate::authorize('view-amministratori'); // Il middleware nel costruttore è sufficiente $amministratori = Amministratore::with('user')->paginate(10); return view('superadmin.amministratori.index', compact('amministratori')); } /** * Show the form for creating a new resource. */ public function create() { // Gate::authorize('manage-amministratori'); // Il middleware nel costruttore è sufficiente $usersForSelect = User::doesntHave('amministratore')->get(); // In questo metodo, non c'è un $amministratore esistente, quindi non c'è un utente associato da includere. return view('superadmin.amministratori.create', compact('usersForSelect')); } /** * Store a newly created resource in storage. */ public function store(Request $request) { // Gate::authorize('manage-amministratori'); // Il middleware nel costruttore è sufficiente $request->validate([ 'name' => 'required|string|max:255', 'email' => 'required|string|email|max:255|unique:users,email', 'password' => 'required|string|min:8|confirmed', 'nome' => 'required|string|max:255', 'cognome' => 'required|string|max:255', 'denominazione_studio' => 'nullable|string|max:255', 'partita_iva' => 'nullable|string|max:20|unique:amministratori,partita_iva', 'codice_fiscale_studio' => 'nullable|string|max:20', 'indirizzo_studio' => 'nullable|string|max:255', 'cap_studio' => 'nullable|string|max:10', 'citta_studio' => 'nullable|string|max:60', 'provincia_studio' => 'nullable|string|max:2', 'telefono_studio' => 'nullable|string|max:20', 'email_studio' => 'nullable|string|email|max:255', 'pec_studio' => 'nullable|string|email|max:255', ]); $user = User::create([ 'name' => $request->name, 'email' => $request->email, 'password' => Hash::make($request->password), 'email_verified_at' => now(), ]); $user->assignRole('admin'); // Assegna il ruolo 'admin' al nuovo utente per coerenza con le rotte Amministratore::create([ 'user_id' => $user->id, 'nome' => $request->nome, 'cognome' => $request->cognome, 'denominazione_studio' => $request->denominazione_studio, 'partita_iva' => $request->partita_iva, 'codice_fiscale_studio' => $request->codice_fiscale_studio, 'indirizzo_studio' => $request->indirizzo_studio, 'cap_studio' => $request->cap_studio, 'citta_studio' => $request->citta_studio, 'provincia_studio' => $request->provincia_studio, 'telefono_studio' => $request->telefono_studio, 'email_studio' => $request->email_studio, 'pec_studio' => $request->pec_studio, ]); return redirect()->route('superadmin.amministratori.index')->with('success', 'Amministratore creato con successo.'); } /** * Show the form for editing the specified resource. */ public function edit(Amministratore $amministratore) // Aggiunto metodo edit { // Gate::authorize('manage-amministratori'); // Il middleware nel costruttore è sufficiente $usersForSelect = User::doesntHave('amministratore')->get(); // Includi l'utente attualmente collegato a questo amministratore nella lista, solo se esiste if ($amministratore->user) { $usersForSelect->push($amministratore->user); } return view('superadmin.amministratori.edit', compact('amministratore', 'usersForSelect')); } /** * Update the specified resource in storage. */ public function update(Request $request, Amministratore $amministratore) { // Gate::authorize('manage-amministratori'); // Il middleware nel costruttore è sufficiente // L'utente associato all'amministratore. $user = $amministratore->user; // Se per qualche motivo l'utente non esiste, non possiamo procedere. if (!$user) { return redirect()->route('superadmin.amministratori.index')->with('error', 'Errore: Impossibile modificare. Utente associato non trovato.'); } $request->validate([ // Dati dell'utente associato 'name' => 'required|string|max:255', 'email' => ['required', 'string', 'email', 'max:255', Rule::unique('users')->ignore($user->id)], // Dati del profilo amministratore 'user_id' => ['required', 'exists:users,id', Rule::unique('amministratori')->ignore($amministratore->id_amministratore, 'id_amministratore')], 'nome' => 'required|string|max:255', 'cognome' => 'required|string|max:255', 'denominazione_studio' => 'nullable|string|max:255', 'partita_iva' => ['nullable', 'string', 'max:20', Rule::unique('amministratori')->ignore($amministratore->id_amministratore, 'id_amministratore')], 'codice_fiscale_studio' => 'nullable|string|max:20', 'indirizzo_studio' => 'nullable|string|max:255', 'cap_studio' => 'nullable|string|max:10', 'citta_studio' => 'nullable|string|max:255', 'provincia_studio' => 'nullable|string|max:2', 'telefono_studio' => 'nullable|string|max:20', 'email_studio' => 'nullable|email|max:255', 'pec_studio' => 'nullable|email|max:255', ]); // Aggiorna i dati dell'utente associato $user->update([ 'name' => $request->name, 'email' => $request->email, ]); // Aggiorna i dati dell'amministratore, escludendo i campi dell'utente $amministratore->update($request->except(['name', 'email', 'password'])); return redirect()->route('superadmin.amministratori.index')->with('success', 'Amministratore aggiornato con successo.'); } /** * Remove the specified resource from storage. */ public function destroy(Amministratore $amministratore) { // Gate::authorize('manage-amministratori'); // Il middleware nel costruttore è sufficiente // Elimina l'utente associato, solo se esiste if ($amministratore->user) { $amministratore->user->delete(); } $amministratore->delete(); return redirect()->route('superadmin.amministratori.index')->with('success', 'Amministratore eliminato con successo.'); } }