Login nur fuer Mitarbeiter (Label), Kunden-Konten werden abgewiesen

Kunden haben Konten im selben Appwrite-Projekt und konnten sich mit ihrem
Portal-Passwort im Ticketsystem anmelden; dabei entstand sogar automatisch ein
employees-Eintrag.

- lib/staffAccess.js: Zugang nur mit Label "mitarbeiter" oder "admin"
- AuthContext: Konto ohne Label -> Sitzung sofort beenden, Hinweis aufs
  Kundenportal (Login, Neuladen, nach dem 2FA-Code); employees-Eintrag nur
  noch fuer Mitarbeiter
- setup-legal.mjs: Rechte nur fuer die Labels (ein erneuter Lauf oeffnet
  nichts mehr fuer "users")

Die eigentliche Sperre sind die Appwrite-Rechte (Kundenportal
scripts/mitarbeiter-zugang.mjs --rechte).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
ClaudeandClaude Opus 5.5 committed 2026-10-03 10:54:16 +00:00
1 parent 65e9931f2c
commit 78bc99a73b
5 files changed
+87 -6

No files matched your search

+32
View File
@@ -0,0 +1,32 @@
import { test } from 'node:test'
import assert from 'node:assert/strict'
import { isStaffAccount, staffPermissions, NO_STAFF_ACCESS } from '../src/lib/staffAccess.js'
import { COLLECTIONS, BUCKET } from '../scripts/setup-legal.mjs'
test('isStaffAccount: nur Label mitarbeiter oder admin', () => {
assert.equal(isStaffAccount({ labels: ['mitarbeiter'] }), true)
assert.equal(isStaffAccount({ labels: ['admin'] }), true)
assert.equal(isStaffAccount({ labels: [] }), false)
assert.equal(isStaffAccount({}), false)
assert.equal(isStaffAccount(null), false)
})
test('staffPermissions: jede Aktion fuer beide Labels', () => {
assert.deepEqual(staffPermissions('read', 'create'), [
'read("label:mitarbeiter")',
'read("label:admin")',
'create("label:mitarbeiter")',
'create("label:admin")',
])
})
test('Hinweis nennt das Kundenportal', () => {
assert.match(NO_STAFF_ACCESS, /project\.webklar\.com/)
})
test('setup-legal: keine Rechte fuer users/any/guests mehr (ein erneuter Lauf darf nichts oeffnen)', () => {
for (const perms of [...COLLECTIONS.map((c) => c.perms), BUCKET.perms]) {
assert.ok(perms.length > 0)
for (const p of perms) assert.match(p, /\("label:(mitarbeiter|admin)"\)$/, p)
}
})