Rollenstruktur und englische Fachbegriffe festgelegt
Der Discord-Server hat drei Sorten Rollen, die Dokumente kannten nur eine: Zugehörigkeit (AfiS, Personalabteilung) als Türsteher, Rangrollen für die Rechte, Zugangsrollen für die Freigabestufe. Das bestehende RoleMapping trägt das fast, es fehlt nur der Türsteher. Die beiden Felder dafür kommen mit Phase 1, die Struktur ist in docs/13-entscheidungen.md festgehalten. Die Freigabestufen heißen jetzt wie die Zugangsrollen: Unclassified, Restricted Access, Confidential Access, Sensitive Access, Critical Operations, Executive Oversight. Fachbegriffe der Domäne bleiben englisch, auch in einer deutschen Oberfläche. Die Bezeichnungen sind damit Daten in ClearanceLevelConfig, nicht mehr Oberflächentext in lib/i18n/de.ts: sie sind im Adminbereich änderbar, und was der Leiter ändern kann, gehört nicht in eine Übersetzungsdatei. StampMark bekommt den Namen hereingereicht. Vier neue Tests prüfen den Zustand, den der Seed herstellt, gegen die Datenbank statt gegen eine Konstante im Code.
This commit is contained in:
@@ -1,5 +1,3 @@
|
||||
import { de } from '@/lib/i18n/de'
|
||||
|
||||
const STAMP_COLOR: Record<number, string> = {
|
||||
0: 'var(--color-stamp-0)',
|
||||
1: 'var(--color-stamp-1)',
|
||||
@@ -17,8 +15,11 @@ export function stampColor(level: number): string {
|
||||
* Stempelmarke oben rechts am Objekt. Der Stempelcharakter kommt aus dem
|
||||
* schmalen Schnitt, der Rahmenlinie und der Farbe, nicht aus Grossbuchstaben.
|
||||
* Die Stufe steht zusaetzlich als Text, nicht nur als Farbe.
|
||||
*
|
||||
* `name` kommt aus ClearanceLevelConfig und ist im Adminbereich aenderbar,
|
||||
* deshalb wird er hereingereicht statt aus lib/i18n/de.ts gelesen.
|
||||
*/
|
||||
export function StampMark({ level }: { level: number }) {
|
||||
export function StampMark({ level, name }: { level: number; name: string }) {
|
||||
return (
|
||||
<span
|
||||
className="inline-flex items-center gap-1.5 border px-1.5 py-0.5 font-condensed text-2xs"
|
||||
@@ -27,7 +28,7 @@ export function StampMark({ level }: { level: number }) {
|
||||
<span aria-hidden className="font-mono">
|
||||
{level}
|
||||
</span>
|
||||
{de.clearance.names[level] ?? de.common.unknown}
|
||||
{name}
|
||||
</span>
|
||||
)
|
||||
}
|
||||
|
||||
+3
-8
@@ -47,14 +47,9 @@ export const de = {
|
||||
label: 'Freigabestufe',
|
||||
classification: 'Klassifizierung',
|
||||
level: (n: number) => `Stufe ${n}`,
|
||||
names: {
|
||||
0: 'Offen',
|
||||
1: 'Intern',
|
||||
2: 'Vertraulich',
|
||||
3: 'Geheim',
|
||||
4: 'Streng geheim',
|
||||
5: 'Leitungssache',
|
||||
} as Record<number, string>,
|
||||
// Die Bezeichnungen der Stufen stehen nicht hier, sondern in
|
||||
// ClearanceLevelConfig: sie sind im Adminbereich änderbar und folgen den
|
||||
// Zugangsrollen des Discord-Servers. Siehe docs/13-entscheidungen.md.
|
||||
locked: 'Inhalt gesperrt',
|
||||
lockedHint: (n: number) => `Sichtbar ab Stufe ${n}`,
|
||||
redacted: 'Geschwärzt',
|
||||
|
||||
@@ -4,11 +4,10 @@ import { join } from 'node:path'
|
||||
import { de } from '@/lib/i18n/de'
|
||||
|
||||
describe('Sprachkonvention', () => {
|
||||
it('kennt alle sechs Freigabestufen', () => {
|
||||
for (let level = 0; level <= 5; level++) {
|
||||
expect(de.clearance.names[level]).toBeTypeOf('string')
|
||||
}
|
||||
expect(de.clearance.names[3]).toBe('Geheim')
|
||||
it('haelt die Stufenbezeichnungen aus den Texten heraus', () => {
|
||||
// Sie stehen in ClearanceLevelConfig, sind im Adminbereich aenderbar und
|
||||
// folgen den Zugangsrollen des Discord-Servers.
|
||||
expect(de.clearance).not.toHaveProperty('names')
|
||||
})
|
||||
|
||||
it('verzichtet auf Ausrufezeichen und Entschuldigungen', () => {
|
||||
|
||||
Reference in New Issue
Block a user