Mitarbeiter nur noch per Label: Kunden-Konten bekommen keinen Team-Zugang
Kunden haben Konten im selben Appwrite-Projekt wie das Ticketsystem. Bisher galt als Mitarbeiter, wer einen employees-Eintrag hatte - den legte das Ticketsystem beim Login jedes Kontos automatisch an, und jedes angemeldete Konto konnte ihn auch selbst anlegen. Damit kam ein Kunde ueber /api/team an Chats, Kundenansicht, Angebote und Finanzen. - staffLabels.js: Mitarbeiter = Label "mitarbeiter" oder "admin" (setzt nur der Server-Key) - Team-Eingang (requireStaffJwt) und Portal-Login-Sperre nur noch per Label; kein Abgleich ueber employees-Eintrag oder Mail mehr - Portal-Login: Konto-Abruf gestoert -> 503 fuer alle (fail closed) - Mitarbeiter anlegen/bearbeiten setzt das Label "mitarbeiter" - scripts/mitarbeiter-zugang.mjs: --status (markiert employees-Eintraege von Kunden), --label, --eintrag-loeschen (nur Eintrag, nie das Konto), --rechte (Probelauf, --anwenden mit Sicherung, --zurueck): any/guests/users -> label:mitarbeiter + label:admin in Collections, Buckets und bei Dokument-/ Datei-Sicherheit auch einzelnen Dokumenten und Dateien Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
be7f9b1aa3
commit
2659385205
12 files changed
+602
-65
No files matched your search
@@ -1,5 +1,6 @@
|
||||
import { config } from '../config.js'
|
||||
import { getEmployeeByEmail, getEmployeeByUserId } from '../services/appwriteAdmin.js'
|
||||
import { getEmployeeByUserId } from '../services/appwriteAdmin.js'
|
||||
import { isAdminAccount, isStaffAccount } from '../services/staffLabels.js'
|
||||
|
||||
/**
|
||||
* Appwrite-Konto zum Bearer-JWT aus dem Ticketsystem (GET /account). null ohne Header oder wenn Appwrite
|
||||
@@ -20,20 +21,15 @@ export async function appwriteAccountFromJwt(req) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Mitarbeiter fuer den Team-Eingang: employees-Eintrag zur Konto-ID, Label "admin" oder - nur mit bestaetigter
|
||||
* Konto-Mail - ein employees-Eintrag zur Mail. Kunden haben Konten im selben Appwrite-Projekt und koennen ihre
|
||||
* Mail ohne Bestaetigung aendern; eine unbestaetigte Mail zaehlt deshalb nie.
|
||||
* Mitarbeiter fuer den Team-Eingang: nur ein Konto mit Label "mitarbeiter" oder "admin" (staffLabels.js). Der
|
||||
* employees-Eintrag liefert nur noch den Anzeigenamen - Kunden haben Konten im selben Appwrite-Projekt und
|
||||
* konnten sich einen solchen Eintrag selbst anlegen.
|
||||
*/
|
||||
export async function resolveTeamStaff(account) {
|
||||
if (!account?.$id) return null
|
||||
const isAdmin = Array.isArray(account.labels) && account.labels.includes('admin')
|
||||
let employee = await getEmployeeByUserId(account.$id).catch(() => null)
|
||||
if (!employee && !isAdmin && account.emailVerification === true && account.email) {
|
||||
employee = await getEmployeeByEmail(account.email).catch(() => null)
|
||||
}
|
||||
if (!employee && !isAdmin) return null
|
||||
if (!account?.$id || !isStaffAccount(account)) return null
|
||||
const employee = await getEmployeeByUserId(account.$id).catch(() => null)
|
||||
return {
|
||||
isAdmin,
|
||||
isAdmin: isAdminAccount(account),
|
||||
name: employee?.displayName || account.name || 'Mitarbeiter',
|
||||
email: account.email || employee?.email || '',
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user