/* ===================================================================== permissions.js — Vollständiger Permission-Katalog Direkt aus dem Anforderungsdokument "Geschützter Zugang, Rollen und Benutzerverwaltung" übernommen. Diese Keys sind die einzigen, die in Rollen oder Personen-Ausnahmen aktiviert werden dürfen. OWNER_ONLY_ACTIONS sind bewusst NICHT Teil von PERMISSIONS — sie erscheinen nirgends in der Rechteverwaltung und können über keinen Schalter an irgendeine Rolle oder Person vergeben werden. Jeder Ort im Code, der eine dieser Aktionen ausführt, muss den Owner direkt prüfen (isOwner === true), NIE eine Permission. ===================================================================== */ export const PERMISSIONS = { // Bewerbungsbereiche APPLICATIONS_VIEW_CREATOR: "Creator-Bewerbungen ansehen", APPLICATIONS_VIEW_MANAGER_SCOUT: "Manager-/Scout-Bewerbungen ansehen", APPLICATIONS_VIEW_ARCHIVED: "Archivierte Bewerbungen ansehen", APPLICATIONS_OPEN_FULL: "Vollständige Bewerbungen öffnen", // Bearbeitung APPLICATIONS_TAKE_OVER: "Bewerbungen übernehmen", APPLICATIONS_ASSIGN: "Bewerbungen anderen Personen zuweisen", APPLICATIONS_CHANGE_STATUS: "Status verändern", APPLICATIONS_ARCHIVE: "Bewerbungen archivieren", APPLICATIONS_RESTORE: "Bewerbungen wiederherstellen", APPLICATIONS_DELETE: "Bewerbungen löschen", // Antworten DRAFTS_CREATE: "Antwortentwürfe erstellen", DRAFTS_EDIT_OWN: "Eigene Entwürfe bearbeiten", DRAFTS_EDIT_OTHERS: "Entwürfe anderer Personen bearbeiten", REPLIES_COPY: "Fertige Antworten kopieren", EMAILS_COPY: "E-Mail-Adressen kopieren", APPLICATIONS_MARK_ANSWERED: "Bewerbungen als beantwortet markieren", // Interne Notizen NOTES_READ: "Notizen lesen", NOTES_WRITE: "Notizen schreiben", NOTES_EDIT_OWN: "Eigene Notizen bearbeiten", NOTES_EDIT_OTHERS: "Fremde Notizen bearbeiten", NOTES_DELETE: "Notizen löschen", // Teamverwaltung TEAM_VIEW: "Andere Teammitglieder ansehen", TEAM_PREPARE_USER: "Neue Benutzer vorbereiten", TEAM_LOCK_USER: "Benutzer sperren", TEAM_ASSIGN_ROLE: "Rollen vergeben", TEAM_CREATE_ROLE: "Rollen erstellen", TEAM_EDIT_PERMISSIONS: "Allgemeine Berechtigungen verändern", // Einstellungen SETTINGS_EDIT_FORMS: "Bewerbungsformulare bearbeiten", SETTINGS_EDIT_STATUS_TYPES: "Statusarten verändern", SETTINGS_VIEW_STATS: "Statistiken ansehen", SETTINGS_VIEW_ACTIVITY_LOG: "Aktivitätsverlauf ansehen", SETTINGS_EDIT_GENERAL: "Allgemeine Einstellungen bearbeiten", // Supporter-Abo (Dogfather; die Teddy-Kollektion entsteht in Kooperation mit VanVan) SUPPORTER_VIEW: "Supporter-Abonnenten ansehen", SUPPORTER_MANAGE_PREMIUMS: "Supporter-Prämien & Versand verwalten", SUPPORTER_MANAGE_COLLECTIONS: "Supporter-Kollektionen verwalten", }; export const PERMISSION_GROUPS = [ { label: "Bewerbungsbereiche", keys: ["APPLICATIONS_VIEW_CREATOR", "APPLICATIONS_VIEW_MANAGER_SCOUT", "APPLICATIONS_VIEW_ARCHIVED", "APPLICATIONS_OPEN_FULL"] }, { label: "Bearbeitung", keys: ["APPLICATIONS_TAKE_OVER", "APPLICATIONS_ASSIGN", "APPLICATIONS_CHANGE_STATUS", "APPLICATIONS_ARCHIVE", "APPLICATIONS_RESTORE", "APPLICATIONS_DELETE"] }, { label: "Antworten", keys: ["DRAFTS_CREATE", "DRAFTS_EDIT_OWN", "DRAFTS_EDIT_OTHERS", "REPLIES_COPY", "EMAILS_COPY", "APPLICATIONS_MARK_ANSWERED"] }, { label: "Interne Notizen", keys: ["NOTES_READ", "NOTES_WRITE", "NOTES_EDIT_OWN", "NOTES_EDIT_OTHERS", "NOTES_DELETE"] }, { label: "Teamverwaltung", keys: ["TEAM_VIEW", "TEAM_PREPARE_USER", "TEAM_LOCK_USER", "TEAM_ASSIGN_ROLE", "TEAM_CREATE_ROLE", "TEAM_EDIT_PERMISSIONS"] }, { label: "Einstellungen", keys: ["SETTINGS_EDIT_FORMS", "SETTINGS_EDIT_STATUS_TYPES", "SETTINGS_VIEW_STATS", "SETTINGS_VIEW_ACTIVITY_LOG", "SETTINGS_EDIT_GENERAL"] }, { label: "DogiCrew 🩵", keys: ["SUPPORTER_VIEW", "SUPPORTER_MANAGE_PREMIUMS", "SUPPORTER_MANAGE_COLLECTIONS"] }, ]; // Nur zur Dokumentation/Klarheit — diese Aktionen sind NIE als Permission // wählbar und werden im Code immer direkt über isOwner geprüft: export const OWNER_ONLY_ACTIONS = [ "CODE_VIEW", "CODE_COPY", "CODE_CREATE", "CODE_EDIT", "CODE_RESET", "EDIT_OWNER_ACCOUNT", "DELETE_OR_LIMIT_OWNER_ROLE", "PROMOTE_TO_OWNER", ]; /** * Prüft, ob eine Person (Rolle + individuelle Ausnahmen) ein Recht hat. * Individuelle Ausnahmen (overrides) haben immer Vorrang vor der Rolle. */ export function hasPermission(rolePermissions, overrides, key) { if (overrides && Object.prototype.hasOwnProperty.call(overrides, key)) { return !!overrides[key]; } return Array.isArray(rolePermissions) && rolePermissions.includes(key); } export function isValidPermissionKey(key) { return Object.prototype.hasOwnProperty.call(PERMISSIONS, key); }