QR-Typen je Gruppe freigeben
Bisher galt die Freigabe eines Typs fuer die ganze Installation. Bei mehreren Gruppen ist das zu grob: Die Marketingabteilung braucht Social Media, die Werkstatt nur Website und PDF. Die Freigabe bekommt eine zweite Ebene. Die Grundeinstellung bleibt die Grundlage; je Gruppe laesst sich davon abweichen. Fehlt eine Abweichung, folgt die Gruppe der Grundeinstellung. Zur offenen Frage im Issue: Die globale Abschaltung gewinnt immer. Ein global abgeschalteter Typ laesst sich in keiner Gruppe einschalten — der Schalter steht dort sichtbar still und nennt den Grund. Andersherum waere "hier abgeschaltet" keine verlaessliche Aussage mehr. Eine eigene Tabelle statt eines zusammengesetzten Schluessels in QrTypeSetting: Der globale Fall braeuchte dort eine leere Gruppe, und PostgreSQL laesst in einem eindeutigen Index beliebig viele NULL nebeneinander zu — die Eindeutigkeit der globalen Zeile waere also gerade nicht gesichert. Die Startseite zeigt die Vereinigung ueber die eigenen Gruppen; beim Anlegen entscheidet die gewaehlte Gruppe, und die Route prueft das noch einmal. Refs #11
This commit is contained in:
@@ -87,6 +87,7 @@ model Group {
|
||||
memberships Membership[]
|
||||
codes QrCode[]
|
||||
domainGrants DomainGrant[]
|
||||
typeSettings QrTypeGroupSetting[]
|
||||
}
|
||||
|
||||
/// Mitgliedschaft eines Benutzers in einer Gruppe, mit Rolle. Ein Benutzer
|
||||
@@ -155,6 +156,31 @@ model QrTypeSetting {
|
||||
updatedAt DateTime @updatedAt
|
||||
}
|
||||
|
||||
/// Abweichung von der globalen Freigabe fuer eine einzelne Gruppe.
|
||||
///
|
||||
/// Bewusst eine eigene Tabelle statt eines zusammengesetzten Schluessels in
|
||||
/// `QrTypeSetting`: Der globale Fall braeuchte dort eine leere Gruppe, und
|
||||
/// PostgreSQL laesst in einem eindeutigen Index beliebig viele NULL
|
||||
/// nebeneinander zu — die Eindeutigkeit der globalen Zeile waere also gerade
|
||||
/// nicht gesichert.
|
||||
///
|
||||
/// Fehlt eine Zeile, folgt die Gruppe der globalen Einstellung. Eine Zeile
|
||||
/// mit `enabled = false` schaltet den Typ **nur** in dieser Gruppe ab. Eine
|
||||
/// Zeile mit `enabled = true` kann eine globale Abschaltung **nicht**
|
||||
/// aufheben — global aus gewinnt immer.
|
||||
model QrTypeGroupSetting {
|
||||
/// Kennung aus der Typ-Registry, z. B. "website".
|
||||
type String
|
||||
groupId String
|
||||
enabled Boolean
|
||||
updatedAt DateTime @updatedAt
|
||||
|
||||
group Group @relation(fields: [groupId], references: [id], onDelete: Cascade)
|
||||
|
||||
@@id([type, groupId])
|
||||
@@index([groupId])
|
||||
}
|
||||
|
||||
/// Ein dynamischer QR-Code. Der QR-Code kodiert `{BASE_URL}/r/{slug}` und
|
||||
/// leitet beim Aufruf auf das Ziel weiter, das aus `data` aufgelöst wird.
|
||||
///
|
||||
|
||||
Reference in New Issue
Block a user