Skip to content

Administration & Berechtigungen ​

Neben Kern-Einreichung und Suche bringt Papex einen betreiberorientierten Admin-Bereich und ein feingranulares Berechtigungssystem mit. Dieses Handbuch behandelt vier Fähigkeiten:

  1. Rollen & Berechtigungen (RBAC) — Paper-Veröffentlichung, -Ansicht, -Download und -Kommentare nach Rolle oder pro Benutzer steuern.
  2. Benutzerberechtigungs-Verwaltung — zusätzliche Rollen zuweisen und pro-Benutzer Erlauben/Verweigern-Overrides für jede Berechtigung setzen.
  3. Co-Review (Peer-Review) — Admins senden Co-Review-Anfragen; Reviewer nehmen an, reichen Stellungnahmen ein und erhalten Empfangsbestätigungen, was einen geschlossenen Kreislauf bildet.
  4. Kategorisierte Nachrichten & Broadcast — ein einheitliches Benachrichtigungszentrum über Systemhinweise, Review-Ergebnisse, Ticket-Empfangsbestätigungen, Co-Review-Anfragen, Admin-DMs und Community-Antworten hinweg, plus gezielte Broadcasts.

1. Rollen & Berechtigungen (RBAC) ​

Papex nutzt ein Drei-Schichten-Modell — Basisrolle + zugewiesene Rollen + pro-Benutzer-Overrides — das sowohl massenhafte rollenbasierte Autorisierung als auch personalisierte pro-Benutzer-Einschränkungen unterstützt.

1.1 Berechtigungsmodell ​

SchichtBeschreibungGepflegt unter
BasisrolleDie jedem Benutzer innewohnende Rolle in users.role: author / moderator / adminStandard author bei Registrierung
Zugewiesene RollenZusätzliche Rollen, die über die Join-Tabelle user_roles auf einen Benutzer gelegt werdenBenutzerverwaltungsseite
Pro-Benutzer-OverridesExplizites Erlauben oder Verweigern für eine einzelne Berechtigung auf einem Benutzer; höchste PrioritätBenutzerverwaltungsseite

ℹ️ reader ist eine zugewiesene RBAC-Rolle (in der roles-Tabelle), keine Datenbank-Basisrolle (users.role erlaubt nur author / moderator / admin). Die Basisrolle definiert Login und Standard-Berechtigungsgrenze; zugewiesene Rollen stapeln obenauf.

1.2 Berechtigungskatalog ​

Das System bringt 15 Berechtigungen in 6 Gruppen mit:

GruppeBerechtigungsschlüsselNameBeschreibung
paperpaper:publishPaper veröffentlichenEin neues Paper oder eine Version einreichen
paper:viewPaper ansehenVeröffentlichte Papers durchsuchen
paper:downloadPaper herunterladenPDF / Quellpaket herunterladen
paper:moderatePaper moderierenFreigeben / ablehnen / zurückziehen
commentcomment:createKommentar postenKommentieren & antworten unter Papers
comment:viewKommentare ansehenDen Kommentarbereich durchsuchen
ticketticket:createTicket erstellenFeedback / Ticket öffnen
ticket:manageTickets verwaltenAuf Tickets antworten / sie bearbeiten
co_reviewco_review:assignCo-Review zuweisenEine Co-Review-Anfrage senden
co_review:respondCo-Review übernehmenEine Anfrage annehmen / ablehnen
co_review:manageCo-Review verwaltenAllen Co-Review-Fortschritt ansehen
messagemessage:broadcastBroadcastNachrichten an Benutzer senden
adminuser:manageBenutzer verwaltenBenutzer ansehen / bearbeiten
role:manageRollen verwaltenRollen & Berechtigungen konfigurieren
permission:manageOverrides verwaltenPro-Benutzer Erlauben / Verweigern

1.3 Standardrollen-Berechtigungen ​

Der Seed (db:seed) schreibt eine Standard-Berechtigungszuordnung für jede Systemrolle:

RolleAnzahlBerechtigungen
admin15Alle Berechtigungen
moderator12Paper ansehen/herunterladen/moderieren, Kommentar erstellen/ansehen, Ticket erstellen/verwalten, Co-Review zuweisen/übernehmen/verwalten, Broadcast, Benutzer verwalten
author6Paper veröffentlichen/ansehen/herunterladen, Kommentar erstellen/ansehen, Ticket erstellen
reader3Paper ansehen/herunterladen, Kommentar ansehen

1.4 Auflösungsreihenfolge ​

Wenn ein geschützter Vorgang läuft, werden die effektiven Berechtigungen wie folgt aufgelöst:

Basisrollen-Berechtigungen
  ∪ zugewiesene Rollen-Berechtigungen      (Rollenvereinigung)
  ∪ pro-Benutzer-Overrides markiert „erlauben“
  − pro-Benutzer-Overrides markiert „verweigern“  (Overrides gewinnen)

Also erlaubt selbst dann, wenn weder Basis- noch zugewiesene Rollen paper:publish gewähren, ein expliziter Erlauben-Override es weiterhin; umgekehrt blockiert ein explizites Verweigern es selbst dann, wenn Rollen es gewähren.

Fallback: sind die roles / permissions-Tabellen noch nicht geseedet (z. B. eine frische DB ohne db:seed), fällt die Engine auf die obige konstante Standard-Zuordnung zurück, um eine Sperrung der ganzen Seite zu vermeiden. db:seed nach dem Deploy auszuführen wird dennoch empfohlen.

1.5 Geschützte Vorgänge (Gateways) ​

Zentrale Vorgänge sind abgesichert; fehlende Berechtigung gibt 403 zurück:

  • POST /api/papers — benötigt paper:publish
  • POST /api/papers/:id/comments — benötigt comment:create
  • Moderation, Ticket-Bearbeitung, Co-Review-Zuweisung/-Verwaltung, Benutzer- & Rollenbearbeitung, Broadcast usw. benötigen ihre jeweiligen Berechtigungen, und die Routen sind durch middleware geschützt (nur moderator / admin dürfen /admin betreten).

2. Benutzerberechtigungs-Verwaltung ​

Öffne /admin/users (benötigt user:manage):

  • Benutzer suchen nach Benutzername / E-Mail / Anzeigename, mit Pagination.
  • Zusätzliche Rollen zuweisen: Systemrollen (admin / moderator / author / reader) im Benutzer-Editor anhaken, um auf die Basisrolle zu stapeln.
  • Drei-Zustands-Berechtigungs-Override: für jede der 15 Berechtigungen setzen:
    • erben (Standard) — dem Rollenvereinigungs-Ergebnis folgen;
    • erlauben — erzwingen, selbst wenn Rollen sie auslassen;
    • verweigern — erzwingen-blockieren, selbst wenn Rollen sie enthalten.

Alle Änderungen speichern sofort über PATCH /api/admin/users/:id und gelten für die nachfolgenden Autorisierungsprüfungen dieses Benutzers.


3. Co-Review (Peer-Review) ​

Co-Review ist ein vollständiger Peer-Review-Kreislauf, der Admin → Reviewer → Autor verbindet.

3.1 Geschlossener Kreislauf ​

Admin weist zu ──► Reviewer erhält eine „Co-Review-Anfrage“-Nachricht
     │
     ▼
Reviewer antwortet (annehmen / ablehnen)
     │ annehmen
     ▼
Reviewer reicht Stellungnahme ein (freigeben / ablehnen / überarbeiten + Kommentar)
     │
     ▼
System-Empfangsbestätigung ──► benachrichtigt Zuweiser „Stellungnahme eingereicht“
                ──► benachrichtigt Autor „Co-Review abgeschlossen“ (falls Autor ≠ Zuweiser)

3.2 Zustandsmaschine ​

Ein Co-Review-Datensatz (co_reviews) wechselt wie folgt:

ZustandBedeutungEingetreten durch
pendingWartet auf Reviewer-AntwortAdmin-Zuweisung (POST /api/co-reviews)
acceptedAngenommenReviewer nimmt an (POST /api/co-reviews/:id/respond {accepted:true})
declinedAbgelehntReviewer lehnt ab (respond {accepted:false})
completedAbgeschlossenReviewer reicht Stellungnahme ein (submit)
expiredAbgelaufen(reservierter Zustand für Timeout-Schließung)

Ein Reviewer darf nur antworten, solange pending, und nur eine Stellungnahme einreichen, solange accepted. Ein nicht passender Zustand gibt INVALID_STATE zurück.

3.3 Eingänge & Benachrichtigungen ​

  • Admin: /admin/co-reviews zum Zuweisen und Überwachen aller Co-Reviews; /admin/co-reviews/:id für Detail. Die Zuweisung wählt aus Papers im Status submitted.
  • Reviewer: /co-reviews (meine Reviews) und /co-reviews/:id (annehmen / ablehnen + Stellungnahme einreichen).
  • Einheitliche Benachrichtigungen: jede Zustandsänderung feuert eine co_review_request / co_review_result-Nachricht an die Beteiligten (siehe Abschnitt 4).

4. Kategorisierte Nachrichten & Broadcast ​

4.1 Nachrichtenkategorien ​

Nachrichten werden nach kind in 8 Kategorien klassifiziert, farbig und gruppiert im Posteingang:

kindLabelTonTypische Quelle
systemSystemhinweisStandardSystemereignisse
ticket_replyTicket-EmpfangsbestätigungInfo blauTicket beantwortet
announcementAnkündigungWarnung gelbAdmin-Broadcast
review_resultReview-ErgebnisErfolg grünPaper freigegeben / abgelehnt
co_review_requestCo-Review-AnfragelilaCo-Review zugewiesen
co_review_resultCo-Review-EmpfangsbestätigunglilaAntwort / Stellungnahme eingereicht
admin_messageAdmin-DMGefahr rotGezielte Direktnachricht
community_replyCommunity-AntwortInfo blauAuf Kommentar geantwortet

Der Posteingang (/messages) unterstützt Filtern nach Kategorie (GET /api/messages?kind=...); Klick auf eine Nachricht navigiert zu deren zugehörigem link (Paper, Ticket, Co-Review, …).

4.2 Einheitlicher Benachrichtigungs-Trichter ​

Alle cross-modularen Alarme werden über einen einzigen notifications-Service ausgesendet, sodass Review-, Ticket-, Co-Review- und Community-Module einen gemeinsamen Benachrichtigungsvertrag teilen:

  • Review: Paper-Entscheidung → Autor benachrichtigen (review_result).
  • Tickets: Mitarbeiter-Antwort → Reporter benachrichtigen (ticket_reply).
  • Co-Review: zuweisen / antworten / einreichen → Reviewer, Zuweiser, Autor benachrichtigen (co_review_request / co_review_result).
  • Community: auf Kommentar geantwortet → Autor des Eltern-Kommentars benachrichtigen (community_reply).

4.3 Broadcast ​

Öffne /admin/messages (benötigt message:broadcast):

  • Umfang:
    • all — jeder Benutzer;
    • role — eine Basisrolle (author / moderator / admin);
    • userIds — eine Liste spezifischer Benutzer-IDs.
  • Kind: announcement / system / admin_message.
  • Titel, Body (mit optionalem link) ausfüllen, absenden, und die Nachricht wird in Massen an die Zielgruppe geschrieben; die Erfolgszahl wird zurückgegeben.

5. Admin-Navigation ​

Admin-Eingänge liegen im angemeldeten Benutzermenü und der /admin-Übersicht, einschließlich:

ModulRouteBeschreibung
Übersicht/adminStat-Karten + Modul-Shortcuts
Review-Warteschlange/admin/reviewPapers freigeben / ablehnen (+ Grund)
Statistiken/admin/statsPlattform-Kennzahlen
Tickets/admin/ticketsTicket-Bearbeitung
Co-Review/admin/co-reviewsCo-Reviews zuweisen & überwachen
Benutzer/admin/usersRollen & Berechtigungs-Overrides
Rollen/admin/rolesRollen-Berechtigungsmatrix
Nachrichten/admin/messagesBroadcast

Diese Routen sind durch middleware geschützt; nur Benutzer mit einer moderator- oder admin-Basisrolle dürfen sie betreten, und Schreib-Aktionen benötigen zusätzlich die passende feingranulare Berechtigung.


6. Ops: migrieren & seeden ​

Die vier Systeme hängen von der Migration 0003_add_rbac_co_review_messages ab (fügt roles / permissions / role_permissions / user_roles / user_permissions / co_reviews / moderation_logs hinzu und erweitert messages.kind auf 8 Kategorien). Beim Deploy oder lokaler Init ausführen:

bash
npm run db:migrate   # Migrationen anwenden (RBAC / Co-Review / Nachrichtenkategorien)
npm run db:seed      # 4 Systemrollen + 15 Berechtigungen + Defaults schreiben (idempotent)

Der RBAC-Seed nutzt onConflictDoNothing und ist sicher erneut ausführbar. Nach Migrate + Seed nutzt die Berechtigungs-Engine die roles / permissions-Tabellen; vor dem Seeden fällt sie auf die konstanten Defaults zurück (siehe 1.4).


7. API-Kurzreferenz ​

MethodePfadBeschreibung
GET/api/messages?kind=Posteingang, nach Kategorie filtern
POST/api/papers/:id/moderateModerieren {action:"approve"|"reject"|"withdraw", reason?}
GET/api/co-reviews?scope=mine|allCo-Review-Liste (meine / alle)
POST/api/co-reviewsZuweisen {paperId, reviewerId, note?}
GET/api/co-reviews/:idCo-Review-Detail
POST/api/co-reviews/:id/respondAntworten {accepted:boolean}
POST/api/co-reviews/:id/submitEinreichen {decision:"approve"|"reject"|"revise", comment}
GET/api/admin/usersBenutzerliste (Pagination / Suche)
PATCH/api/admin/users/:idRollen setzen {roleKeys} oder Override {permission:{key,grant}}
GET/api/admin/rolesRollenliste
PUT/api/admin/roles/:idRollenberechtigungen setzen {permissionKeys}
POST/api/admin/messagesBroadcast {scope, role?, userIds?, kind, title, body, link?}
GET/api/admin/statsPlattform-Statistiken

Siehe die API-Referenz für die vollständige Liste.

Papex is open source under the Apache-2.0 license.