diff --git a/code/app/Models/Concerns/RoleableTrait.php b/code/app/Models/Concerns/RoleableTrait.php index 27c8efde..42eeee47 100644 --- a/code/app/Models/Concerns/RoleableTrait.php +++ b/code/app/Models/Concerns/RoleableTrait.php @@ -29,6 +29,25 @@ public function getManagedRolesAttribute() return Role::sortedByHierarchy($all_roles == false); } + public function checkRoleTargets($role) + { + $test = $this->roles()->where('roles.id', $role->id)->first(); + if ($test) { + $classes = $role->getAllClasses(); + foreach($classes as $class) { + $targets = $test->applications(true, false, $class); + if ($targets->isEmpty()) { + return false; + } + } + + return true; + } + else { + return false; + } + } + public function addRole($role, $assigned) { $role_id = normalizeId($role); diff --git a/code/app/Role.php b/code/app/Role.php index 5fdd58da..64422736 100644 --- a/code/app/Role.php +++ b/code/app/Role.php @@ -242,7 +242,10 @@ public function appliesOnly($obj) /* Questa funzione va chiamata solo sugli oggetti Role restituiti da User::roles(), in quanto si applica solo sull'istanza del ruolo - assegnata ad uno specifico utente + assegnata ad uno specifico utente. + Verifica se il ruolo si applica a tutti i soggetti della classe + specificata (o più in generale a tutti i soggetti di tutte le classi + disponibili) */ public function appliesAll($class = null) { @@ -268,7 +271,8 @@ public function appliesAll($class = null) /* Questa funzione va chiamata solo sugli oggetti Role restituiti da User::roles(), in quanto si applica solo sull'istanza del ruolo - assegnata ad uno specifico utente + assegnata ad uno specifico utente. + Restituisce l'elenco dei soggetti cui il ruolo si applica */ public function applications($all = false, $exclude_trashed = false, $target_class = null) { diff --git a/code/resources/views/permissions/edit.blade.php b/code/resources/views/permissions/edit.blade.php index ccf271fa..081561d8 100644 --- a/code/resources/views/permissions/edit.blade.php +++ b/code/resources/views/permissions/edit.blade.php @@ -39,6 +39,9 @@ @endforeach @@ -58,7 +61,7 @@ @endforeach - + @stack('postponed') diff --git a/code/resources/views/permissions/main_roleuser.blade.php b/code/resources/views/permissions/main_roleuser.blade.php index dd4838f6..1f946146 100644 --- a/code/resources/views/permissions/main_roleuser.blade.php +++ b/code/resources/views/permissions/main_roleuser.blade.php @@ -11,23 +11,33 @@ ?> @foreach($targets as $target) - @if ($targets->count() > 1 && $last_class != get_class($target)) - -
  • - {{ _i('Tutti (%s)', [$last_class::commonClassName()]) }}
    - - {{ _i("Questo permesso speciale si applica automaticamente a tutti i soggetti (presenti e futuri) e permette di agire su tutti, benché l'utente assegnatario non sarà esplicitamente visibile dagli altri.") }} - - - appliesAll($last_class) ? 'checked' : '' }}> - -
  • + @if ($last_class != get_class($target)) + @php + $last_class = get_class($target); + $last_applies_all = null; + @endphp + + @if($targets->count() > 1) +
  • + {{ _i('Tutti (%s)', [$last_class::commonClassName()]) }}
    + + {{ _i("Questo permesso speciale si applica automaticamente a tutti i soggetti (presenti e futuri) e permette di agire su tutti, benché l'utente assegnatario non sarà esplicitamente visibile dagli altri.") }} + + + appliesAll($last_class) ? 'checked' : '' }}> + +
  • + @else + @php + $last_applies_all = $r->appliesAll($last_class); + @endphp + @endif @endif
  • {{ $target->printableName() }} - appliesOnly($target) ? 'checked' : '' }} {{ $user->id == $currentuser->id && $target->id == $currentgas->id ? 'disabled' : '' }}> + appliesOnly($target) || $last_applies_all ? 'checked' : '' }} {{ $user->id == $currentuser->id && $target->id == $currentgas->id ? 'disabled' : '' }}>
  • @endforeach