|
@@ -319,6 +319,11 @@ class User extends Component
|
|
|
|
|
|
|
|
public function add()
|
|
public function add()
|
|
|
{
|
|
{
|
|
|
|
|
+ if (!$this->canAddUser()) {
|
|
|
|
|
+ session()->flash('error', 'Non hai i permessi per aggiungere utenti.');
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
$this->logCurrentDatabase('In add() method');
|
|
$this->logCurrentDatabase('In add() method');
|
|
|
|
|
|
|
|
$this->resetFields();
|
|
$this->resetFields();
|
|
@@ -330,6 +335,11 @@ class User extends Component
|
|
|
|
|
|
|
|
public function store()
|
|
public function store()
|
|
|
{
|
|
{
|
|
|
|
|
+ if (!$this->canAddUser()) {
|
|
|
|
|
+ session()->flash('error', 'Non hai i permessi per aggiungere utenti.');
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
$this->logCurrentDatabase('Start of store() method');
|
|
$this->logCurrentDatabase('Start of store() method');
|
|
|
|
|
|
|
|
Log::info('User store', [
|
|
Log::info('User store', [
|
|
@@ -404,10 +414,20 @@ class User extends Component
|
|
|
'level' => $this->level
|
|
'level' => $this->level
|
|
|
], $plainPassword);
|
|
], $plainPassword);
|
|
|
|
|
|
|
|
|
|
+ if (!$emailSent) {
|
|
|
|
|
+ Log::info('HTML email failed, trying simple email', ['email' => $this->email]);
|
|
|
|
|
+ $emailSent = $this->sendSimpleWelcomeEmail([
|
|
|
|
|
+ 'name' => $this->name,
|
|
|
|
|
+ 'cognome' => $this->cognome,
|
|
|
|
|
+ 'email' => $this->email,
|
|
|
|
|
+ 'level' => $this->level
|
|
|
|
|
+ ], $plainPassword);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
if ($emailSent) {
|
|
if ($emailSent) {
|
|
|
- session()->flash('success', 'Utente creato e email di benvenuto inviata');
|
|
|
|
|
|
|
+ session()->flash('success', 'Utente creato e email di benvenuto inviata con successo');
|
|
|
} else {
|
|
} else {
|
|
|
- session()->flash('success', 'Utente creato ma errore nell\'invio email');
|
|
|
|
|
|
|
+ session()->flash('success', 'Utente creato ma errore nell\'invio dell\'email. Controlla i log per dettagli.');
|
|
|
}
|
|
}
|
|
|
} else {
|
|
} else {
|
|
|
session()->flash('success', 'Utente creato nel database tenant ma errore nella sincronizzazione master');
|
|
session()->flash('success', 'Utente creato nel database tenant ma errore nella sincronizzazione master');
|
|
@@ -436,6 +456,11 @@ class User extends Component
|
|
|
|
|
|
|
|
public function edit($id)
|
|
public function edit($id)
|
|
|
{
|
|
{
|
|
|
|
|
+ if (!$this->canEditUser($id)) {
|
|
|
|
|
+ session()->flash('error', 'Non hai i permessi per modificare questo utente.');
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
$this->logCurrentDatabase('Start of edit() method');
|
|
$this->logCurrentDatabase('Start of edit() method');
|
|
|
|
|
|
|
|
try {
|
|
try {
|
|
@@ -444,7 +469,7 @@ class User extends Component
|
|
|
$this->logCurrentDatabase('After finding user in edit()');
|
|
$this->logCurrentDatabase('After finding user in edit()');
|
|
|
|
|
|
|
|
if (!$user) {
|
|
if (!$user) {
|
|
|
- session()->flash('error', 'Dato non trovato');
|
|
|
|
|
|
|
+ session()->flash('error', 'Utente non trovato');
|
|
|
} else {
|
|
} else {
|
|
|
$this->name = $user->name;
|
|
$this->name = $user->name;
|
|
|
$this->cognome = $user->cognome;
|
|
$this->cognome = $user->cognome;
|
|
@@ -455,6 +480,7 @@ class User extends Component
|
|
|
$this->add = false;
|
|
$this->add = false;
|
|
|
$this->enabled = $user->enabled;
|
|
$this->enabled = $user->enabled;
|
|
|
$this->userExists = true;
|
|
$this->userExists = true;
|
|
|
|
|
+ // Store old email for master database update
|
|
|
$this->oldEmail = $user->email;
|
|
$this->oldEmail = $user->email;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -479,6 +505,7 @@ class User extends Component
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+
|
|
|
public function update()
|
|
public function update()
|
|
|
{
|
|
{
|
|
|
$this->logCurrentDatabase('Start of update() method');
|
|
$this->logCurrentDatabase('Start of update() method');
|
|
@@ -571,15 +598,50 @@ class User extends Component
|
|
|
|
|
|
|
|
public function delete($id)
|
|
public function delete($id)
|
|
|
{
|
|
{
|
|
|
|
|
+ Log::info('Delete method called', [
|
|
|
|
|
+ 'user_id_to_delete' => $id,
|
|
|
|
|
+ 'current_user_id' => Auth::id(),
|
|
|
|
|
+ 'current_user_level' => Auth::user()->level
|
|
|
|
|
+ ]);
|
|
|
|
|
+
|
|
|
|
|
+ if (!$this->canDeleteUser($id)) {
|
|
|
|
|
+ Log::warning('Delete permission denied', [
|
|
|
|
|
+ 'user_id_to_delete' => $id,
|
|
|
|
|
+ 'current_user_id' => Auth::id(),
|
|
|
|
|
+ 'current_user_level' => Auth::user()->level
|
|
|
|
|
+ ]);
|
|
|
|
|
+ session()->flash('error', 'Non hai i permessi per eliminare questo utente.');
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
$this->logCurrentDatabase('Start of delete() method');
|
|
$this->logCurrentDatabase('Start of delete() method');
|
|
|
|
|
|
|
|
try {
|
|
try {
|
|
|
$user = \App\Models\User::find($id);
|
|
$user = \App\Models\User::find($id);
|
|
|
- $userEmail = $user ? $user->email : null;
|
|
|
|
|
|
|
|
|
|
- $user->delete();
|
|
|
|
|
|
|
+ if (!$user) {
|
|
|
|
|
+ Log::error('User not found for deletion', ['user_id' => $id]);
|
|
|
|
|
+ session()->flash('error', 'Utente non trovato.');
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- $this->logCurrentDatabase('After deleting user');
|
|
|
|
|
|
|
+ $userEmail = $user->email;
|
|
|
|
|
+ $userName = $user->name;
|
|
|
|
|
+ $userCognome = $user->cognome;
|
|
|
|
|
+
|
|
|
|
|
+ Log::info('Found user for deletion', [
|
|
|
|
|
+ 'user_id' => $id,
|
|
|
|
|
+ 'user_email' => $userEmail,
|
|
|
|
|
+ 'user_name' => $userName . ' ' . $userCognome
|
|
|
|
|
+ ]);
|
|
|
|
|
+
|
|
|
|
|
+ $deleted = $user->delete();
|
|
|
|
|
+
|
|
|
|
|
+ if (!$deleted) {
|
|
|
|
|
+ throw new \Exception('Failed to delete user from tenant database');
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ $this->logCurrentDatabase('After deleting user from tenant');
|
|
|
|
|
|
|
|
Log::info('User deleted successfully from tenant database', [
|
|
Log::info('User deleted successfully from tenant database', [
|
|
|
'user_id' => $id,
|
|
'user_id' => $id,
|
|
@@ -587,21 +649,90 @@ class User extends Component
|
|
|
'database' => DB::connection()->getDatabaseName()
|
|
'database' => DB::connection()->getDatabaseName()
|
|
|
]);
|
|
]);
|
|
|
|
|
|
|
|
- if ($userEmail) {
|
|
|
|
|
- $this->deleteUserFromMasterDatabase($userEmail);
|
|
|
|
|
|
|
+ $masterDeleted = $this->deleteUserFromMasterDatabase($userEmail);
|
|
|
|
|
+
|
|
|
|
|
+ if ($masterDeleted) {
|
|
|
|
|
+ Log::info('User deleted from both databases successfully', [
|
|
|
|
|
+ 'user_id' => $id,
|
|
|
|
|
+ 'user_email' => $userEmail
|
|
|
|
|
+ ]);
|
|
|
|
|
+ session()->flash('success', "Utente {$userName} {$userCognome} eliminato con successo");
|
|
|
|
|
+ } else {
|
|
|
|
|
+ Log::warning('User deleted from tenant but failed to delete from master', [
|
|
|
|
|
+ 'user_id' => $id,
|
|
|
|
|
+ 'user_email' => $userEmail
|
|
|
|
|
+ ]);
|
|
|
|
|
+ session()->flash('success', "Utente eliminato dal database tenant, ma errore nella sincronizzazione master");
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- session()->flash('success', "Dato eliminato");
|
|
|
|
|
|
|
+ $this->emit('userDeleted');
|
|
|
|
|
+ $this->emit('load-data-table');
|
|
|
} catch (\Exception $e) {
|
|
} catch (\Exception $e) {
|
|
|
$this->logCurrentDatabase('Error in delete() method');
|
|
$this->logCurrentDatabase('Error in delete() method');
|
|
|
|
|
|
|
|
Log::error('User deletion failed', [
|
|
Log::error('User deletion failed', [
|
|
|
'user_id' => $id,
|
|
'user_id' => $id,
|
|
|
'error' => $e->getMessage(),
|
|
'error' => $e->getMessage(),
|
|
|
|
|
+ 'trace' => $e->getTraceAsString(),
|
|
|
'database' => DB::connection()->getDatabaseName()
|
|
'database' => DB::connection()->getDatabaseName()
|
|
|
]);
|
|
]);
|
|
|
|
|
|
|
|
- session()->flash('error', 'Errore (' . $e->getMessage() . ')');
|
|
|
|
|
|
|
+ session()->flash('error', 'Errore durante l\'eliminazione: ' . $e->getMessage());
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ private function canEditUser($userId)
|
|
|
|
|
+ {
|
|
|
|
|
+ $currentUser = Auth::user();
|
|
|
|
|
+
|
|
|
|
|
+ if ($currentUser->level == 0) {
|
|
|
|
|
+ $targetUser = \App\Models\User::find($userId);
|
|
|
|
|
+ return $targetUser && $targetUser->email != 'admin@admin.com';
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return $userId == $currentUser->id;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * Check if current user can edit email and password of a specific user
|
|
|
|
|
+ */
|
|
|
|
|
+ private function canEditEmailAndPassword($userId)
|
|
|
|
|
+ {
|
|
|
|
|
+ $currentUser = Auth::user();
|
|
|
|
|
+
|
|
|
|
|
+ return $userId == $currentUser->id;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * Check if current user can delete a specific user
|
|
|
|
|
+ */
|
|
|
|
|
+ private function canDeleteUser($userId)
|
|
|
|
|
+ {
|
|
|
|
|
+ $currentUser = Auth::user();
|
|
|
|
|
+
|
|
|
|
|
+ if ($currentUser->level != 0) {
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if ($userId == $currentUser->id) {
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ $targetUser = \App\Models\User::find($userId);
|
|
|
|
|
+ if ($targetUser && $targetUser->email == 'admin@admin.com') {
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return true;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * Check if current user can add users
|
|
|
|
|
+ */
|
|
|
|
|
+ private function canAddUser()
|
|
|
|
|
+ {
|
|
|
|
|
+ $currentUser = Auth::user();
|
|
|
|
|
+ return $currentUser->level == 0;
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|