You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: src/Models/Group.php
+30-16Lines changed: 30 additions & 16 deletions
Original file line number
Diff line number
Diff line change
@@ -75,7 +75,8 @@ public static function getTranslatedFields()
75
75
/**
76
76
* Sincronizza i permessi delle viste e dei segmenti per un modulo specifico.
77
77
* Se il gruppo non ha permessi sul modulo, rimuove i permessi sulle viste e segmenti.
78
-
* Se il gruppo ha permessi sul modulo, aggiunge i permessi su tutte le viste e segmenti.
78
+
* Se il gruppo ha permessi sul modulo, aggiunge i permessi alle viste predefinite e al segmento predefinito.
79
+
* Gli Amministratori mantengono sempre accesso completo.
79
80
*
80
81
* @param int $id_module ID del modulo
81
82
* @param string $permessi Permessi ('r', 'rw', o '-')
@@ -86,31 +87,44 @@ public function syncModulePermissions($id_module, $permessi)
86
87
{
87
88
$database = database();
88
89
90
+
// Gli Amministratori mantengono sempre accesso completo - non modificare i loro permessi
91
+
if ($this->nome === 'Amministratori') {
92
+
return;
93
+
}
94
+
89
95
// Se i permessi sono di lettura o lettura/scrittura
90
96
if ($permessi == 'r' || $permessi == 'rw') {
91
-
// Sincronizza i permessi delle viste
92
-
$count_views = $database->fetchNum('SELECT * FROM `zz_group_view` WHERE `id_gruppo` = '.prepare($this->id).' AND `id_vista` IN (SELECT `id` FROM `zz_views` WHERE `id_module`='.prepare($id_module).')');
93
-
94
-
if (empty($count_views)) {
95
-
$views = $database->fetchArray('SELECT `id` FROM `zz_views` WHERE `id_module`='.prepare($id_module));
// Aggiungi accesso alle viste predefinite se non ce l'ha già
98
+
$default_views = $database->fetchArray('SELECT `id` FROM `zz_views` WHERE `id_module`='.prepare($id_module).' AND `default` = 1');
99
+
100
+
foreach ($default_viewsas$view) {
101
+
// Controlla se il gruppo ha già accesso a questa vista specifica
102
+
$has_view_access = $database->fetchNum('SELECT COUNT(*) as cont FROM `zz_group_view` WHERE `id_gruppo` = '.prepare($this->id).' AND `id_vista` = '.prepare($view['id']))['cont'];
103
+
104
+
if ($has_view_access == 0) {
105
+
$database->insert('zz_group_view', [
106
+
'id_gruppo' => $this->id,
107
+
'id_vista' => $view['id']
108
+
]);
99
109
}
100
110
}
101
111
102
-
// Sincronizza i permessi dei segmenti
103
-
$count_segments = $database->fetchNum('SELECT * FROM `zz_group_segment` WHERE `id_gruppo` = '.prepare($this->id).' AND `id_segment` IN (SELECT `id` FROM `zz_segments` WHERE `id_module`='.prepare($id_module).')');
112
+
// Aggiungi accesso ai segmenti predefiniti se non ce l'ha già
113
+
$default_segments = $database->fetchArray('SELECT `id` FROM `zz_segments` WHERE `id_module`='.prepare($id_module).' AND `predefined` = 1');
104
114
105
-
if (empty($count_segments)) {
106
-
$segments = $database->fetchArray('SELECT `id` FROM `zz_segments` WHERE `id_module`='.prepare($id_module));
115
+
foreach ($default_segmentsas$segment) {
116
+
// Controlla se il gruppo ha già accesso a questo segmento specifico
117
+
$has_segment_access = $database->fetchNum('SELECT COUNT(*) as cont FROM `zz_group_segment` WHERE `id_gruppo` = '.prepare($this->id).' AND `id_segment` = '.prepare($segment['id']))['cont'];
// Se i permessi sono stati rimossi, rimuovi anche i permessi su viste e segmenti
127
+
// Se i permessi sono stati rimossi, rimuovi tutti i permessi su viste e segmenti del modulo
114
128
$database->query('DELETE FROM `zz_group_view` WHERE `id_gruppo` = '.prepare($this->id).' AND `id_vista` IN (SELECT `id` FROM `zz_views` WHERE `id_module`='.prepare($id_module).')');
115
129
$database->query('DELETE FROM `zz_group_segment` WHERE `id_gruppo` = '.prepare($this->id).' AND `id_segment` IN (SELECT `id` FROM `zz_segments` WHERE `id_module`='.prepare($id_module).')');
0 commit comments