CodamAIDocs
Themafertig

Das Audit lesen

Wer das Audit lesen darf und in welcher Form die Einträge vorliegen.

Ausprägungen
Plattform-Administratoralle anderen → abgelehntSeite zu groß → abgelehnt

Worum es geht

Das Audit enthält, was alle auf der ganzen Plattform getan haben, in jedem Mandanten. Wer einen Teil davon lesen könnte, könnte schon aus den Einträgen herauslesen, welche Kunden es gibt. Deshalb ist das Lesen streng geregelt.

Wie gelesen wird

Das Audit hat genau eine Lesefunktion: die Schnittstelle AuditQueryUseCase mit der Methode page(page, size). Code, der im selben Programm wie CIAS läuft, ruft sie auf, etwa eine Verwaltungsoberfläche des Hosts. Einen Schreibzugang gibt es nicht. Einträge entstehen allein durch den Zuhörer, siehe Eine Spur für alles. Ein Audit, in das jemand von außen schreiben kann, wäre ein Ort für ein Alibi.

Darf dieser Aufrufer das Audit lesen?
  1. CIAS
    angemeldet
    Gibt es einen angemeldeten Aufrufer?
    ↳ nein abgelehnt: cias.audit.access-denied
  2. CIAS
    Plattform-Administrator
    Trägt sein Token eine Rolle, die als Plattform-Administrator zählt?
    ↳ nein abgelehnt: cias.audit.access-denied
  3. CIAS
    Seite
    Ist page mindestens 0 und size zwischen 1 und 500?
    ↳ nein abgelehnt, bevor etwas gelesen wird
  4. Eine Seite Einträge, neueste zuerst

Eine Seite

Anfrage
auditQuery.page(0, 3)
Antwort
AuditPage[
  total = 1284, page = 0, size = 3,
  entries = [
    { type: "AuthorizationEvent.Granted",
      detail: "Granted[assignmentId=a41f…, userId=5c9e…, roleClient=cias-backend, roleKey=tenant-user, tenantKey=nordbau, validUntil=null, grantedBy=nordbau, occurredOn=2026-09-22T09:20:11Z]",
      actorId: "e7d0…", actorTenant: "nordbau",
      occurredOn: 2026-09-22T09:20:11Z, recordedOn: 2026-09-22T09:20:11.042Z },
    { type: "TenantEvent.Suspended",
      detail: "Suspended[tenantId=4f2a…, tenantKey=suedlogistik, occurredOn=2026-09-22T09:14:03Z]",
      actorId: "b21c…", actorTenant: null, … },
    { type: "AuthorizationEvent.Expired",
      detail: "Expired[assignmentId=77c3…, …]",
      actorId: null, actorTenant: null, … }
  ]
]
TeilBedeutung
entriesdie Einträge dieser Seite, neueste zuerst. Bei gleichem Zeitpunkt entscheidet die ID, damit keine Zeile beim Blättern doppelt kommt oder fehlt
totalwie viele Einträge es insgesamt gibt
page, sizewelche Seite gelesen wurde und wie viele Zeilen eine volle Seite hat. Standard 50, höchstens 500
actorId leerdie Plattform hat selbst gehandelt oder niemand war angemeldet, im Beispiel ein Zeitgeber

Das Feld detail ist Text, nicht strukturiert. Es ist die Beschreibung des Ereignisses, wie Java einen Record als Text ausgibt: Name, dann alle Felder mit Werten in eckigen Klammern.

Die Ausprägungen

Wer liest

Wann: Das Token trägt eine Rolle, die als Plattform-Administrator zählt.

Liest alle Einträge aller Mandanten.

Ergebnis: eine Seite Einträge

Wann: Mandanten-Administrator, gewöhnliche Person oder kein Token.

Auch den eigenen Mandanten sehen sie nicht. Ein Filter nach Mandant müsste Einträge ohne Mandant weglassen, etwa die eines Zeitgebers, und ein Audit, das still weglässt, was es nicht einordnen kann, ist das schlechteste Audit.

Ergebnis: abgelehnt: cias.audit.access-denied

Wann: size über 500, unter 1, oder page negativ.

CIAS lehnt ab, statt still weniger Zeilen zu liefern. Sonst glaubte der Aufrufer, alles gesehen zu haben.

Ergebnis: abgelehnt, nichts gelesen

Fallen

Weiter

Quellen im Code und in der Wissensdatenbank
  • CIAS/cias-audit – AuditQueryUseCase.page, AuditService (requireAdministrator), AuditPage (DEFAULT_SIZE 50, MAX_SIZE 500, requireReadable), AuditEntryView, AuditAccessDeniedException (cias.audit.access-denied)
  • CIAS/cias-audit – JpaAuditTrailAdapter.findPage (neueste zuerst, dann nach id), count
  • CIAS/cias-audit/docs/adr – ADR-033
Suchen