Worum es geht
Ein Attributfilter zeigt einer Person nur die Zeilen, die zu einem Wert aus ihrem Profil passen. Beispiel: Aufträge order haben ein Feld companyId. Im Profil einer Sachbearbeiterin steht das Attribut company mit den Firmen, für die sie zuständig ist. Der Attributfilter verbindet beides: Sie sieht nur Aufträge dieser Firmen.
Ein Attribut ist ein benannter Wert im Profil einer Person, etwa company, region oder projects. CIAS legt die Attribute ins Token, CDMS liest sie bei jeder Anfrage aus.
Vom Attribut zur Bedingung
-
1CIASlegt die Attribute der Person in die Anfrage, z. B.
company: ["123456", "654321"] -
2CDMSliest das Attribut
companyaus -
3CDMSzerlegt die Werte an Kommas, entfernt Leerzeichen, leere Einträge und Doppelte
-
4CDMSbaut die Bedingung für das Feld
companyIdEin Wert →companyId = 123456. Mehrere Werte →companyId IN (123456, 654321). Enthält die Liste*→ gar keine Bedingung. -
5CDMS→Databaseverbindet die Bedingung mit UND mit deiner AnfrageErgebnis: Nur Aufträge der eigenen Firmen kommen zurück.
Entscheidungstabelle
| Attribut company im Profil | Ergebnis |
|---|---|
| "123456" | companyId = 123456 |
| "123456", "654321" | companyId IN (123456, 654321) |
| "123456,654321" (ein Eintrag mit Komma) | companyId IN (123456, 654321), wie oben |
| enthält irgendwo "*" | keine Bedingung, alle Aufträge |
| fehlt ganz oder ist eine leere Liste | 422 missing-attribute-on-profile|company |
| vorhanden, aber ohne brauchbaren Wert, z. B. "" oder "," | 422 empty-attribute-on-profile|company |
Ein einziges * hebt den Filter ganz auf, auch wenn daneben noch andere Werte stehen.
Wo du einen Attributfilter festlegst
Im Hub verbindest du im Reiter Filter ein Profilattribut mit einem Feld des Modells. Der Generator erzeugt daraus eine Filterklasse, z. B. OrderCompanyIdFilter. Du musst nichts programmieren. Siehe Modellieren im Hub.
Wann: Das Modell hat selbst ein Feld mit dem Wert, z. B. companyId.
Die Bedingung prüft genau dieses Feld.
Ergebnis: companyId IN (…)
Wann: Das Modell zeigt über eine Beziehung auf das Objekt, z. B. company.
Der Filter prüft die id des Ziels. Im Profil stehen dann die IDs der Firmen.
Ergebnis: company.id IN (…)
Wann: Am Modell hängen zwei Attributfilter, z. B. company und region.
Beide Bedingungen gelten gleichzeitig, verbunden mit UND. Fehlt eines der Attribute, scheitert die Anfrage mit 422.
Ergebnis: Nur Zeilen, die zu beiden Attributen passen.
Wann: Der Filter hängt an einem abstrakten Modell.
Jeder Untertyp übernimmt ihn.
Ergebnis: Privat- und Firmenkunden sind gleich gefiltert.
Wo der Filter wirkt
Der Attributfilter läuft überall mit, wo CDMS Zeilen des Modells liest:
| Anfrage | Wirkung |
|---|---|
POST /query | Nur passende Zeilen in data; totalCount zählt nur sie. |
POST /read/{id} | Nicht passende Zeile → 404 not-found. |
Listen und Referenzen in einer response | Nicht passende Einträge fehlen; eine nicht passende Einzelreferenz ist null. |
PUT, PATCH, DELETE, rollback | CDMS prüft vorher mit demselben Filter: nicht passend → 404. |
Siehe Warum Unsichtbares 404 liefert.
Personen mit mehreren Mandanten
Ein Attribut kann für die Person überall gleich sein oder je Mandant einen eigenen Wert haben. Arbeitet eine Person in Mandant A, gilt ihr Wert für A. Arbeitet sie in Mandant B, gilt der Wert für B. Ein Wert je Mandant ersetzt dabei den allgemeinen Wert, er wird nicht dazugezählt. Ist für den aktiven Mandanten ein leerer Wert hinterlegt, scheitert die Anfrage mit 422. Siehe Ein Wert pro Person oder pro Mandant.
Fallen
Wie es weitergeht
- Sichtbarkeit nach Besitzer: Nur die eigenen Daten
- Eigene Regeln im Code: Eigene Datenfilter
- Woher Attribute kommen: Der Weg ins Token