Skip to content

PEOPLE: Globale Suchfunktion für Personen ohne Rollen für Rolle Mitarbeiter und Kassier der FO ermöglichen #80

Description

@olibrian

Mitarbeiter auf der Ebene FO sollten mit der Rolle Mitarbeiter/ Kassier auch in "ohne Rollen" suchen können. Aktuell können nur Admins Personen "ohne Rollen" über die globale Suche finden.

Achtung: Die Mitarbeiter und Kassier sollen dabei nur die Personen ohne Rollen innerhalb der eigenen FO finden. Personen welche die letzte Rolle in einer anderen FO hatten, sollen nicht gefunden werden. In dieser Hinsicht unterscheidet sich diese neue Fähigkeit von der bisherigen Fähigkeit von Admins.

⚠️ Achtung beim Testen auf Integration: Die Liste von überhaupt auffindbaren Personen wird für 15 Minuten gecached. Also wenn eine Person "gelöscht" wird, kann erst 15 Minuten nach der letzten Suche getestet werden, ob die gelöschte Person in der Suche wirklich noch sichtbar ist.

Tech-Spec

  • Umsetzung im Core, da sich das Feature verallgemeinern lässt und keine Zugriffserweiterung darstellt (es ist primär ein bequemerer Weg, gelöschte Personen zu finden, welche man sowieso schon finden könnte)
  • Die Permissions :layer_full bzw. :layer_and_below_full vergeben bisher den Zugang auf die "Ohne Rollen"-Ansicht
  • An denselben Permissions können wir daher diese Fähigkeit aufhängen
  • Die Ohne-Rollen-Ansicht wird im DeletedPeopleController generiert
  • Man braucht die :index_deleted_people Ability um diese Ansicht zu sehen
  • Admins haben die :show Ability auf den gelöschten Personen, aber nicht :show_details oder :show_full. So können sie nur die Kontaktangaben der gelöschten Personen einsehen:
    Screenshot 2022-12-16 at 14-38-52
  • Diese Informationen sind mehr oder weniger dieselben wie man auch auf der Ohne-Rollen-Ansicht sehen kann:
    Screenshot 2022-12-16 at 14-39-32 hitobito - Ohne Rollen
  • Wir können den berechtigten Personen in den Layers also ebenfalls die :show Permission auf ihren "Ohne Rollen" Personen vergeben, ohne das Berechtigungssystem gross auszuweiten

TODO

  • In SearchStrategies::Base zusätzlich zum Admin-if neuen Code einfügen, der alle Grupen der current_person holt, aus diesen Gruppen die Layers berechnet, und diese nach can(:index_deleted_people, layer) filtert
  • Die IDs aller gelöschten Personen dieser Layers ebenfalls zu den erlaubten ids hinzufügen (Group::DeletedPeople.deleted_for(layer).pluck(:id) oder so ähnlich)
  • In PersonAbility die :show Berechtigung auf den gelöschten Personen vergeben
    • permission(:layer_full).may(:show).deleted_people_in_same_layer
    • permission(:layer_and_below_full).may(:show).deleted_people_in_same_layer_or_below
    • Achtung: Nur das letzte permission(:foo).may(:bar) hat tatsächlich einen Effekt:
    # falsch:
    permission(:layer_full).may(:show).condition_a # wird ignoriert wegen dem zweiten, gleich beginnenden Statement
    permission(:layer_full).may(:show).condition_b
    
    # richtig:
    permission(:layer_full).may(:show).condition_a_or_condition_b # so werden die Bedingungen kombiniert
    • Die Logik für deleted_people in der Ability muss neu geschrieben werden
      • Bisher werden die gelöschten Personen einer Gruppe in Group::DeletedPeople berechnet
      • Für die Ability muss diese Logik quasi umgekehrt geschrieben werden: Gegeben eine Person, muss entschieden werden ob diese Person in der betroffenen Gruppe als "Ohne Rollen" gilt, also ob sie durch Group::DeletedPeople.deleted_for(group) gefunden werden würde. Das ist unter Umständen nicht ganz trivial, weil alte gelöschte Rollen durch neue, inzwischen wieder gültige Rollen übersteuert werden können.
  • Specs schreiben
  • Mit angemessener Rolle "durchklicken"
  • CHANGELOG-Eintrag unter "unreleased" unten hinzufügen

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions