Änderungen von Dokument Digitale Mitgliederverwaltung

Zuletzt geändert von Daniel Herrmann am 2026/02/22 21:17

Von Version Icon 55.1 Icon
bearbeitet von Daniel Herrmann
am 2025/10/24 14:49
Änderungskommentar: Es gibt keinen Kommentar für diese Version
Auf Version Icon 64.1 Icon
bearbeitet von Daniel Herrmann
am 2025/10/24 20:21
Änderungskommentar: Es gibt keinen Kommentar für diese Version

Zusammenfassung

Details

Icon Seiteneigenschaften
Inhalt
... ... @@ -23,43 +23,50 @@
23 23  
24 24  Kurz gesagt: Die EES ist schnell und unkompliziert, aber unsicher und nur für risikofreie Vorgänge geeignet. Die FES ist technisch sicherer, rechtlich belastbarer und für wichtige, aber formfreie Vereinbarungen ideal. Die QES ist rechtlich vollwertig wie eine handschriftliche Unterschrift und für alle Schriftformerfordernisse zwingend notwendig. Zusammenfassung:
25 25  
26 -~|
26 +(% class="wrapped" style="text-decoration:none" %)
27 +|=(((
28 +Signaturtyp
29 +)))|=(((
30 +Sicherheitsniveau
31 +)))|=(((
32 +Rechtliche Wirkung
33 +)))|=(((
34 +Umsetzung
35 +)))
36 +|(((
37 +**EES**
38 +)))|(((
39 +niedrig
40 +)))|(((
41 +schwacher Beweiswert
42 +)))|(((
43 +Eingescannte Unterschrift, ein einfacher Button
44 +)))
45 +|(((
46 +**FES**
47 +)))|(((
48 +mittel
49 +)))|(((
50 +starker Beweiswert, aber kein Ersatz der Schriftform
51 +)))|(((
52 +Adobe Sign, DocuSign oder ähnliches
53 +)))
54 +|(((
55 +**QES**
56 +)))|(((
57 +hoch
58 +)))|(((
59 +gesetzlich Schriftformersatz
60 +)))|(((
61 +Mehrfaktor, über einen zugelassenen Vertrauensdienstleister
62 +)))
27 27  
28 -Signaturtyp |
29 29  
30 -Sicherheitsniveau |
31 31  
32 -Rechtliche Wirkung |
66 +{{confluence_tip title="Zusammenfassung"}}
67 +Für uns im Makerspace bedeutet das, dass wir die EES und FES (über DocuSeal) einsetzen können. Wir haben keine Partnerschaft mit einem Anbieter, der die QES und damit die Schriftformerfordernis abdecken würde, sodass wir alle Dokumente, für die die Schriftform erforderlich ist, weiterhin handschriftlich unterschreiben lassen.
68 +{{/confluence_tip}}
33 33  
34 -|=Umsetzung
35 -|
36 -
37 -**EES** |
38 -
39 -niedrig |
40 -
41 -schwacher Beweiswert |
42 -
43 -Eingescannte Unterschrift, ein einfacher Button | |
44 -
45 -**FES** |
46 -
47 -mittel |
48 -
49 -starker Beweiswert, aber kein Ersatz der Schriftform |
50 -
51 -Adobe Sign, DocuSign oder ähnliches | |
52 -
53 -**QES** |
54 -
55 -hoch |
56 -
57 -gesetzlich Schriftformersatz |
58 -
59 -Mehrfaktor, über einen zugelassenen Vertrauensdienstleister |
60 -
61 -~{~{confluence_tip title="Zusammenfassung"}} Für uns im Makerspace bedeutet das, dass wir die EES und FES (über DocuSeal) einsetzen können. Wir haben keine Partnerschaft mit einem Anbieter, der die QES und damit die Schriftformerfordernis abdecken würde, sodass wir alle Dokumente, für die die Schriftform erforderlich ist, weiterhin handschriftlich unterschreiben lassen. ~{~{/confluence_tip}}
62 -
63 63  = Dokumente und Workflow =
64 64  
65 65  == Dokumenten-Arten ==
... ... @@ -67,14 +67,14 @@
67 67  Am Dienstag, den 12.08.2025 fand hierzu ein Workshop statt, bei dem Vertreter des IT Teams, der Mitgliederverwaltung sowie des Vorstands teilgenommen haben. Dabei wurden die Ziele erläutert und definiert, ebenfalls haben eine Übersicht der bestehenden Dokumenten-Typen erstellt, mit denen wir im Verein heute hantieren. Für jedes Dokument wurde dann evaluiert, ob es in Zukunft komplett digitalisiert werden kann oder ob beispielsweise aus Haftungsgründen die Schriftform und damit eine handschriftliche Unterschrift weiterhin notwendig ist. Die folgende Tabelle gibt einen Überblick:
68 68  
69 69  (% class="wrapped" %)
70 -|=(% scope="col" %)(((
77 +|=(((
71 71  Dokumenten-Typ
72 -)))|=(% scope="col" %)(((
79 +)))|=(((
73 73  Vollständig
74 74  digitalisieren
75 -)))|=(% scope="col" %)(((
82 +)))|=(((
76 76  Prozess heute
77 -)))|=(% scope="col" %)(((
84 +)))|=(((
78 78  Notwendige Änderungen
79 79  )))
80 80  |(((
... ... @@ -157,7 +157,7 @@
157 157  )))|(((
158 158  Notwendig für Funktionäre, Einweisende, und so weiter.
159 159  
160 -Ist ein Blanko-Formular, welches ausgefüllt, eingeworfen und abgeheftet wird.
167 +Ist ein Blanko-Formular, welches ausgefüllt, eingeworfen und abgeheftet wird.
161 161  Danach wird ein Flag für das jeweilige Mitglied gesetzt, dass die Erklärung abgegeben wurde.
162 162  )))|(((
163 163  **Vollständig digital**. Vorstand oder Mitgliederverwaltung löst den Prozess über das Profil des Mitglieds aus (Button auf Homepage), danach digital weiter.
... ... @@ -310,13 +310,13 @@
310 310  Im zweiten Schritt wird nun ein oder mehrere personalisierte Dokumente erstellt. Hier gibt es eine Entscheidungsmatrix:
311 311  
312 312  (% class="wrapped" %)
313 -|=(% scope="col" %)(((
320 +|=(((
314 314  Remote / Lokal
315 -)))|=(% scope="col" %)(((
322 +)))|=(((
316 316  Schriftformerfordernis
317 -)))|=(% scope="col" %)(((
324 +)))|=(((
318 318  Beispiel
319 -)))|=(% scope="col" %)(((
326 +)))|=(((
320 320  Beschreibung
321 321  )))
322 322  |(((
... ... @@ -354,7 +354,7 @@
354 354  )))|(((
355 355  Einweisungszettel Vor-Ort Einweisung
356 356  )))|(((
357 -Dokument wird über eine Docuseal One-Off Submission erzeugt und als PDF auf das Tablet heruntergeladen.\\
364 +Dokument wird über eine Docuseal One-Off Submission erzeugt und als PDF auf das Tablet heruntergeladen.
358 358  )))
359 359  
360 360  {{error title="Docuseal Lizenz"}}
... ... @@ -413,7 +413,7 @@
413 413  Einweisungszettel Vor-Ort Einweisung
414 414  )))|(((
415 415  Auf dem Makerspace Tablet wird das Dokument vor Ort ausgedruckt (AirPrint oder CUPS) und **handschriftlich** unterschrieben.
416 -\\
423 +
417 417  )))
418 418  
419 419  === Ablegen und Verarbeiten ===
... ... @@ -421,11 +421,11 @@
421 421  Egal welcher Prozess angewandt wird, das Dokument muss am Ende in Paperless eingelesen und mit den Metadaten (siehe unten) versehen werden. Hier gibt es drei verschiedene Varianten:
422 422  
423 423  (% class="wrapped" %)
424 -|=(% scope="col" %)(((
431 +|=(((
425 425  Signatur über
426 -)))|=(% scope="col" %)(((
433 +)))|=(((
427 427  Paperless Ingest
428 -)))|=(% scope="col" %)(((
435 +)))|=(((
429 429  Ablauf
430 430  )))
431 431  |(((
... ... @@ -530,12 +530,12 @@
530 530  (% class="wrapped" %)
531 531  |=(% scope="row" %)(((
532 532  Workflow
533 -)))|=(% scope="col" %)(((
540 +)))|=(((
534 534  Schriftform erforderlich
535 -)))|=(% scope="col" %)(((
542 +)))|=(((
536 536  Lokal / Remote
537 537  )))
538 -|=(% scope="row" %)(((
545 +|=(((
539 539  Fall 1: Digital Remote
540 540  )))|(((
541 541  Nein
... ... @@ -542,7 +542,7 @@
542 542  )))|(((
543 543  Remote
544 544  )))
545 -|=(% scope="row" %)(((
552 +|=(((
546 546  Fall 2: Digital Makerspace
547 547  )))|(((
548 548  Nein
... ... @@ -549,7 +549,7 @@
549 549  )))|(((
550 550  Lokal
551 551  )))
552 -|=(% scope="row" %)(((
559 +|=(((
553 553  Fall 3: Handschriftlich Remote
554 554  )))|(((
555 555  Ja
... ... @@ -556,7 +556,7 @@
556 556  )))|(((
557 557  Remote
558 558  )))
559 -|=(% scope="row" %)(((
566 +|=(((
560 560  Fall 4: Handschriftlich Makerspace
561 561  )))|(((
562 562  Ja
... ... @@ -610,7 +610,7 @@
610 610  11. Speichert das Backend die Anfrage als Signature Request in der Datenbank
611 611  11. Erstellt eine "Submission" in DocuSeal. Diese basiert auf einem Template und enthält so viele Daten wie möglich schon vorausgefüllt. Mindestens aber enthält die Submission den signierten QR Code (siehe unten).
612 612  11. (((
613 -Die URL für das Dokument werden als Antwort des API Requests an das Tablet zurück geschickt. Dies enthält die Embed-URL, die direkt auf dem Tablet angezeigt werden kann. Beispiel:\\
620 +Die URL für das Dokument werden als Antwort des API Requests an das Tablet zurück geschickt. Dies enthält die Embed-URL, die direkt auf dem Tablet angezeigt werden kann. Beispiel:
614 614  
615 615  {{expand}}
616 616  {{code language="json"}}
... ... @@ -695,804 +695,6 @@
695 695  1. Als Teil des N8n Workflows informiert N8n das Backend darüber, dass das Dokument eingescannt und verarbeitet wurde. Der Vorgang wird entsprechend in der Datenbank als erledigt markiert.
696 696  1. (Optional): Wurde im vorherigen Schritt über den Webhook ein N8n Workflow ausgelöst, kann dieser nun weitere Schritte unternehmen (beispielsweise Vikunja Tasks erzeugen, Mails verschicken, oder ähnlich)
697 697  
698 -= Paperless NGX =
699 -
700 -Das Herzstück der digitalen Mitgliederakte bildet Paperless NGX. Es wird im Makerspace lokal betrieben und ist daher nur aus dem Netzwerk des Makerspaces oder [[per VPN>>doc:xwiki:IN.IT Infrastruktur.IT im Makerspace.[HOWTO] Makerspace VPN.WebHome]] erreichbar. Der Zugang zu Paperless ist über OpenID Connect an [[doc:xwiki:IN.IT Infrastruktur.Services.Keycloak.WebHome]] gekoppelt, Zugang besteht nur für Mitglieder der Gruppen **Vorstand** und **Mitgliederverwaltung**.
701 -
702 -== Paperless Übersicht ==
703 -
704 -**Dokumente** sind die primären Ressourcen in Paperless. Ein Dokument kann über mehrere Wege in Paperless aufgenommen werden (der Prozess wird **Ingestion** genannt):
705 -
706 -* **Per E-Mail**: es sind zwei Mail-Adressen eingerichtet, eingehende Anhänge werden automatisch von Paperless verarbeitet. Die QR Code Verarbeitung (siehe unten) findet hier ebenfalls Anwendung.
707 -** Die Mitgliederverwaltung: [[mitglieder-dokumente@makerspace-darmstadt.de>>mailto:mitglieder-dokumente@makerspace-darmstadt.de||shape="rect"]]
708 -** Den Vorstand: [[vorstand-dokumente@makerspace-darmstadt.de>>mailto:vorstand-dokumente@makerspace-darmstadt.de||shape="rect"]]
709 -* **Per Ordner**: Auf unserem NAS gibt es einen speziellen Ordner, der in Paperless eingebunden ist. Alle Dokumente, die in diesen Ordner gelegt werden, werden automatisch von Paperless verarbeitet. Dieser Ordner wird hauptsächlich vom Dokumentenscanner verwendet, der die gescannten Dokumente ablegt. Dies ermöglicht einen einfachen Scan mit einem einfachen Button, die Dokumente werden dann automatisch in Paperless erkannt
710 -* **Per Weboberfläche**: Es ist ebenfalls möglich, Dokumente manuell über die Weboberfläche hinzuzufügen.
711 -
712 -Die folgenden Grafik gibt eine Übersicht:
713 -
714 -{{confluence_drawio border="true" diagramName="Ingest Diagram" simpleViewer="false" links="auto" tbstyle="top" lbox="true" diagramWidth="1016" height="451" revision="3"/}}
715 -
716 -Die Konfiguration des Scanners ist so eingerichtet, dass nur zwei Buttons auf dem Display sichtbar sind:
717 -
718 -* **SCAN Vorstand** - Platziert das Dokument in dem Consumption Ordner für den Vorstand, Rechte und Tags werden dann automatisch gesetzt
719 -* **SCAN MV** - Platziert das Dokument in dem Consumption Ordner für die Mitgliederverwaltung, Rechte und Tags werden dann automatisch gesetzt
720 -
721 -== Übersicht der Metadaten ==
722 -
723 -Dokumente werden dann Meta-Daten zugeordnet, die eine spätere Suche und Zuordnung erleichtern. Diese Meta-Daten sind:
724 -
725 -* **Korrespondent**: Im Prinzip der "Gesprächspartner", beispielsweise der Absender eines Briefs. Im Falle der Mitgliederverwaltung wird für jedes Mitglied und jeden registrierten Gast automatisch im Hintergrund ein Korrespondent angelegt. Die Korrespondenten heißen:
726 -** Für **Mitglieder**: //Vorname Nachname (#Mitgliedsnummer)//, also beispielsweise "//Daniel Herrmann (#250)//"
727 -** Für **Gäste**: //Vorname Nachname (GEindeutigeNummer)//, also beispielsweise "//Max Mustermann (G1244)//"
728 -** Bei **Vereinseintritt** und **Vereinsaustritt** werden die Korrespondenten automatisch umbenannt, auch Namensänderungen werden automatisch verarbeitet.
729 -* **Tags**: Einem Dokument können beliebig viele Tags zugewiesen werden. **Tags** dienen der einfacheren **Zuordnung** und dem **Wiederfinden** von Dokumenten. Es gibt allerdings auch spezielle Tags für Dokumente die eingelesen aber noch nicht bearbeitet wurden, so genannte "Inbox Tags":
730 -** (% style="color:var(--ds-icon-success,#22a06b);" %)**Inbox Mitgliederverwaltung**(%%) - Alle **Dokumente** die **per Mail oder per Ordner** für die **Gruppe Mitgliederverwaltung** aufgenommen wurden und **nicht automatisch zugeordnet** werden konnten.
731 -** (% style="color:var(--ds-icon-accent-blue,#1d7afc);" %)**Inbox Vorstand**(%%) - Alle **Dokumente** die **per Mail oder per Ordner** für die **Gruppe Vorstand** aufgenommen wurden und **nicht automatisch zugeordnet** werden konnten.
732 -* **Dokumenten-Typen**: Einem Dokument wird exakt ein Typ zugewiesen. Dokumenten Typen sind im Prinzip einfache Gruppen. Für die Mitgliederverwaltung sind die Gruppen gemäß der folgenden Liste festgelegt, können aber natürlich bei Bedarf erweitert werden.
733 -** Mitgliedsantrag
734 -** SEPA Lastschriftmandat
735 -** Studienbescheinigung
736 -** Bestätigung Schlüsselausgabe
737 -** Verpflichtungserklärung Datenschutz
738 -** Übungsleitervertrag
739 -** Nutzungsvereinbarung Schulungsinhalte
740 -** Bestellung als Einweiser:in
741 -** Haftungsausschluss
742 -** Einweisungszettel
743 -** Lagervertrag Kistenlager
744 -** Lagervertrag Projektlager
745 -* (((
746 -**Storage Path**: Speicherpfade sind ein fortgeschrittenes Feature, welches kontrolliert, wie die Dateien im unterliegenden Dateisystem gespeichert werden. In der Regel arbeitet man nicht direkt mit den Dateien, aber wenn man aus lange Sicht mal aus Paperless NGX weg ziehen möchte kann es sinnvoll sein, die Dokumente in einer Struktur zu speichern, die man theoretisch auch manuell durchsuchen könnte. Details finden sich in der [[Dokumentation von Paperless zu File Name Handling>>url:https://docs.paperless-ngx.com/advanced_usage/#file-name-handling||shape="rect"]].
747 -\\{{info title="Verhalten von Paperless"}}(% style="text-decoration: none;color:var(--ds-text-accent-purple-bolder,#352c63);" %)Paperless checks the filename of a document whenever it is saved. Changing (or deleting) a (%%)[[storage path>>url:https://docs.paperless-ngx.com/advanced_usage/#storage-paths||style="text-decoration: none;" shape="rect"]](% style="text-decoration: none;color:var(--ds-text-accent-purple-bolder,#352c63);" %) will automatically be reflected in the file system. However, when changing (% style="text-decoration: none;" %){{code language="none"}}PAPERLESS_FILENAME_FORMAT{{/code}}(% style="text-decoration: none;color:var(--ds-text-accent-purple-bolder,#352c63);" %) you will need to manually run the (%%)[[
748 -
749 -{{code language="none"}}
750 -document renamer
751 -{{/code}}>>url:https://docs.paperless-ngx.com/administration/#renamer||style="text-decoration: none;" shape="rect"]](% style="text-decoration: none;color:var(--ds-text-accent-purple-bolder,#352c63);" %) to move any existing documents.{{/info}}
752 -In unserem Fall kommen die folgenden Speicherpfade zum Einsatz:
753 -\\
754 -
755 -|=(% scope="col" %)(((
756 -Name
757 -)))|=(% scope="col" %)(((
758 -Definition
759 -)))|=(% scope="col" %)(((
760 -Sichtbar für
761 -)))|=(% scope="col" %)(((
762 -Anwendung
763 -)))
764 -|(((
765 -Mitglieder Einweisungszettel
766 -)))|(((
767 -(% class="code" %)
768 -(((
769 -~{~{ correspondent }}/Einweisungen/~{~{ document_type }}-~{~{ tag_list }}-~{~{ created }}-~{~{ doc_pk }}
770 -)))
771 -)))|(((
772 -Mitgliederverwaltung
773 -)))|(((
774 -Einweisungszettel
775 -)))
776 -|(((
777 -Mitglieder Unterlagen
778 -)))|(((
779 -(% class="code" %)
780 -(((
781 -~{~{ correspondent }}/~{~{ document_type }}-~{~{ created }}-~{~{ doc_pk }}
782 -)))
783 -)))|(((
784 -Mitgliederverwaltung
785 -)))|(((
786 -Alle anderen Mitgliederdokumente
787 -)))
788 -|(((
789 -Vorstand Dokumente
790 -)))|(((
791 -(% class="code" %)
792 -(((
793 -~{~{ created_year }}/~{~{ correspondent }}/~{~{ title }}
794 -)))
795 -)))|(((
796 -Vorstand
797 -)))|(((
798 -Alle Vorstandsdokumente
799 -)))
800 -)))
801 -
802 -== Automatische Zuordnung von Metadaten ==
803 -
804 -Paperless unterstützt die automatische Zuordnung von Metadaten basierend auf festen Strings. So kann man beispielsweise angeben, dass ein Dokumententyp "Haftungsausschluss" zugewiesen werden soll, wenn der String "Haftungsausschluss" irgendwo im Dokument vorkommt. Dies ist allerdings auf eine korrekte Funktion der Texterkennung angewiesen und funktioniert erfahrungsgemäß nur in manchen Fällen, sodass mindestens eine manuelle Überprüfung trotzdem notwendig kommt. Wenn beispielsweise ein Brief mit dem Satz "ich dachte, ich hätte den Haftungsausschluss bereits abgegeben, könntet ihr dies bitte prüfen" erfasst wird, würde der basierend auf der Regel ebenfalls kategorisiert werden.
805 -
806 -**Aus diesem Grund wird auf jedes Dokument einen spezieller QR Code aufgedruckt**. Der QR code wird vom Post-Consume Script verwendet um die Metadaten in Paperless zuzuordnen. Weiterhin können Daten übermittelt werden, die dann mittels Webhook an N8n übermittelt werden und dort im Workflow verwendet werden können. Der Aufbau orientiert sich an dem Aufbau eines **JSON Web Tokens (JWT).**
807 -
808 -=== (% style="color:var(--ds-text-accent-purple-bolder,#352c63)" %)Barcode erzeugen(%%) ===
809 -
810 -(% style="color:var(--ds-text-accent-purple-bolder,#352c63)" %)Der Prozess zur Erzeugung eines QR Codes ist wie folgt:
811 -
812 -* **Payload (Daten) festlegen**. Einige Werte sind verpflichtend, andere können nach Bedarf optional hinzugefügt werden.
813 -* JWT erzeugen und signieren. der JWT besteht aus drei Teilen:
814 -** **Header**: **alg** (Algorithmus) und **typ** (JWT) sind verpflichtend. Zusätzlich fügen wir einen Timestamp, eine eindeutige ID und eine Gültigkeitsdauer hinzu.
815 -** **Body**: beinhaltet die eigentlichen Daten.
816 -** **Signature**: Mit Hilfe eines Secrets und wird die Signatur erzeugt und automatisch angehängt.
817 -* PDF417 code erzeugen: ein JWT ist per Definition URL safe und kann daher einfach in ein QR code umgewandelt werden.
818 -
819 -=== Header ===
820 -
821 -Der Header enthält wichtige Meta-Daten, diese werden von der JWT Library automatisch erzeugt und beschreiben in der Regel den verwendeten Key-Typ.
822 -
823 -=== Body ===
824 -
825 -Die folgenden Claims sind im Body verfügbar.
826 -
827 -|=(((
828 -Claim
829 -)))|=(((
830 -Type
831 -)))|=(((
832 -Pflicht
833 -)))|=(((
834 -Beschreibung
835 -)))
836 -|(((
837 -id
838 -)))|(((
839 -UUID4
840 -)))|(((
841 -✅️
842 -)))|(((
843 -Eindeutige ID dieses Dokuments
844 -)))
845 -|(((
846 -time
847 -)))|(((
848 -Zahl
849 -)))|(((
850 -✅️
851 -)))|(((
852 -UTC Linux-Timestamp an dem das Dokument und der QR Code erzeugt wurden
853 -)))
854 -|(((
855 -exp
856 -)))|(((
857 -Zahl
858 -)))|(((
859 -✅️
860 -)))|(((
861 -UTC Linux-Timestamp der angibt, bis wann das Dokument gültig ist.
862 -)))
863 -|(((
864 -(% class="code" %)
865 -(((
866 -typ
867 -)))
868 -)))|(((
869 -String
870 -)))|(((
871 -✅️
872 -)))|(((
873 -Typ des Dokuments basierend auf der unten definierten Liste.
874 -)))
875 -|mode|String|✅️ |Kann entweder "digital" oder "manual" sein und bestimmt, ob N8n den unterschriebenen Vertrag ans Backend meldet.
876 -|(((
877 -(% class="code" %)
878 -(((
879 -cor
880 -)))
881 -)))|(((
882 -String
883 -)))|(((
884 -❌️
885 -)))|(((
886 -Optional: Name des Korrespondenten, dem das Dokument zugeordnet werden soll
887 -)))
888 -|(((
889 -tags
890 -)))|(((
891 -List[String]
892 -)))|(((
893 -❌️
894 -)))|(((
895 -Liste an Tags, die dem Dokument zugeordnet werden soll
896 -)))
897 -|(((
898 -spth
899 -)))|(((
900 -String
901 -)))|(((
902 -❌️
903 -)))|(((
904 -Storage Path, das dem Dokument zugeordnet werden soll
905 -)))
906 -|(((
907 -opt
908 -)))|(((
909 -dict
910 -)))|(((
911 -❌️
912 -)))|(((
913 -Optionale Attribute, die mit eincodiert werden und dem N8n Workflow übergeben werden.
914 -)))
915 -
916 -=== {{id name="DigitaleMitgliederverwaltung-Footer"/}}Footer ===
917 -
918 -Der Footer wird automatisch erzeugt und erhält eine Signatur über den Header und den Body, basierend auf einem Algorithmus und einer Signatur.
919 -
920 -{{confluence_tip title="Algorithmus"}}
921 -Von den meisten Libraries werden symmetrische und asymmetrische Signaturen unterstützt. Die Verwendung eines symmetrischen Algorithmus ist für uns einfacher.
922 -
923 -Für diesen Anwendungsfall nutzen wir (% style="text-decoration: none;color:var(--ds-text,#333333);" %)**HS256** (HMAC mit SHA-256 Algorithmus).
924 -{{/confluence_tip}}
925 -
926 -=== Auswahl der Library ===
927 -
928 -Die Implementierung für die Erzeugung und das Validieren erfolgt in Python. Dies hat den Hintergrund, dass sowohl unser Backend als auch Paperless NGX (und damit das Post-Consumption Script) in Python implementiert ist. Es gibt verschiedene Libraries, die betrachtet wurden:
929 -
930 -|=(((
931 -Name
932 -)))|=(((
933 -CVE
934 -)))|=(((
935 -Github
936 -)))|=(((
937 -GH⭐
938 -)))|=(((
939 -Letztes Release
940 -)))|=(((
941 -Offene Issues
942 -)))|=(((
943 -Dokumentation
944 -)))|=(((
945 -Qualität Dokumentation
946 -)))|=(((
947 -In Backend vorhanden?
948 -)))|=(((
949 -In Paperless vorhanden?
950 -)))
951 -|(((
952 -python-jose
953 -)))|(((
954 -3/0
955 -)))|(((
956 -[[https:~~/~~/github.com/mpdavis/python-jose>>url:https://github.com/mpdavis/python-jose||shape="rect"]]
957 -)))|(((
958 -1.7k
959 -)))|(((
960 -28.05.2025
961 -)))|(((
962 -83
963 -)))|(((
964 -[[https:~~/~~/python-jose.readthedocs.io/en/latest/>>url:https://python-jose.readthedocs.io/en/latest/||shape="rect"]]
965 -)))|(((
966 -⛔ Wenige Bespiele, API Dokumentation fehlt komplett
967 -)))|(((
968 -❌️
969 -)))|(((
970 -❌️
971 -)))
972 -|(((
973 -pyJWT
974 -)))|(((
975 -4/0
976 -)))|(((
977 -[[https:~~/~~/github.com/jpadilla/pyjwt>>url:https://github.com/jpadilla/pyjwt||shape="rect"]]
978 -)))|(((
979 -5.4k
980 -)))|(((
981 -28.11.2024
982 -)))|(((
983 -30
984 -)))|(((
985 -[[https:~~/~~/pyjwt.readthedocs.io>>url:https://pyjwt.readthedocs.io||shape="rect"]]
986 -)))|(((
987 -➕️ Gute Dokumentation, API, Beispiele, Changelog
988 -)))|(((
989 -✅️ 2.10.1
990 -Dep von firebase
991 -)))|(((
992 -✅️ 2.10.1
993 -)))
994 -|(((
995 -JWCrypto
996 -)))|(((
997 -5/0
998 -)))|(((
999 -[[https:~~/~~/github.com/latchset/jwcrypto>>url:https://github.com/latchset/jwcrypto||shape="rect"]]
1000 -)))|(((
1001 -465
1002 -)))|(((
1003 -06.03.2024
1004 -)))|(((
1005 -8
1006 -)))|(((
1007 -[[https:~~/~~/jwcrypto.readthedocs.io>>url:https://jwcrypto.readthedocs.io||shape="rect"]]
1008 -)))|(((
1009 -➕️ API Doc, einige Beispiele
1010 -)))|(((
1011 -✅️ 1.5.6
1012 -Dep von python-keycloak
1013 -)))|(((
1014 -❌️
1015 -)))
1016 -
1017 -Unsere bevorzugte Library ist **pyjwt**. Diese ist auch in **paperless nativ vorhanden**, sodass wir uns für die Implementierung mittels **pyjwt** entschieden haben.
1018 -
1019 -=== PDF417 Code ===
1020 -
1021 -Als Format für den Code wurde PDF417 ausgewählt, da dieser mehr Platz und Fehlerkorrektur bietet. Weiterhin gibt es eine einfach zu nutzende Library für Python (Erzeugung) und PDF417 wird von (% style="color:var(--ds-text-accent-purple-bolder,#352c63); text-decoration:none" %)ZXING unterstützt, welches in Paperless eingebettet ist. Ein solcher Barcode sieht beispielsweise so aus:
1022 -
1023 -(% style="color:var(--ds-text-accent-purple-bolder,#352c63); text-decoration:none" %)[[image:attach:barcode.jpg||height="250"]]
1024 -
1025 -(% style="color:var(--ds-text-accent-purple-bolder,#352c63); text-decoration:none" %)Daraus kann dann eine Base64 basierte Repräsentation berechnet werden, die einfach in Docuseal hochgeladen werden kann.
1026 -
1027 -=== Referenz-Implementierung ===
1028 -
1029 -Eine Referenz-Implementierung befindet sich im Makerspace Gitlab: [[https:~~/~~/git.makerspace-darmstadt.de/makerspace-it-infrastructure/mitgliederverwaltung/paperless-pdf417-reference>>url:https://git.makerspace-darmstadt.de/makerspace-it-infrastructure/mitgliederverwaltung/paperless-pdf417-reference||shape="rect"]]
1030 -
1031 -=== Post Consumption Script ===
1032 -
1033 -Die eigentliche Zuordnung der Meta-Daten erfolgt über ein so genanntes Post Consumption Script. Dieses befindet sich ebenfalls im Makerspace Gitlab: [[https:~~/~~/git.makerspace-darmstadt.de/makerspace-it-infrastructure/mitgliederverwaltung/paperless-post-consumption-script#>>url:https://git.makerspace-darmstadt.de/makerspace-it-infrastructure/mitgliederverwaltung/paperless-post-consumption-script||shape="rect"]]
1034 -
1035 -== Paperless Berechtigungen ==
1036 -
1037 -Paperless NGX hat ein Berechtigungssystem, welches sich über fast alle Ressourcen erstreckt. Grundsätzlich gibt es **Benutzer** und **Gruppen**. Berechtigungen können dann global vergeben werden (Sichtbarkeit von Features) und zusätzlich auf Objektebene vergeben werden.
1038 -
1039 -=== Benutzer und Gruppen ===
1040 -
1041 -Paperless NGX ist so konfiguriert, dass sich Benutzer mit ihrem zentralen Makerspace Login anmelden können (OIDC über Keycloak). Eine Anmeldung mit lokalen Zugangsdaten ist nicht möglich. Bei der Anmeldung werden ebenfalls die Gruppen aus Keycloak übernommen, aber nur die folgenden:
1042 -
1043 -* **Vorstand**: Für die Mitglieder des Vorstands
1044 -* **Mitgliederverwaltung**: Alle Personen, die mit der Verwaltung der Mitglieder betraut sind
1045 -* **IT Admin**: IT Administratoren im Makerspace
1046 -
1047 -Nutzer, die keine dieser Gruppen angehören haben keine Rechte in Paperless. Sie können sich zwar anmelden, aber selbst die Willkommens-Seite erzeugt eine "Permission Denied" Fehlermeldung.
1048 -
1049 -=== Globale Berechtigungen ===
1050 -
1051 -Berechtigungen werden grundsätzlich nicht auf Benutzerebene konfiguriert, sondern ausschließlich auf Gruppenebene. So wird sichergestellt, dass bei der Änderung einer Gruppenzugehörigkeit auch die damit verbundenen Rechte entzogen oder gewährt werden, ohne dass eine manuelle Änderung notwendig ist. Die folgende Tabelle gibt eine Übersicht der konfigurierten globalen Berechtigungen pro Gruppe:
1052 -
1053 -|=(% scope="row" %)(((
1054 -Berechtigung
1055 -)))|=(% scope="col" %)(((
1056 -Beschreibung
1057 -)))|=(% scope="col" %)(((
1058 -Mitgliederverwaltung
1059 -)))|=(% scope="col" %)(((
1060 -Vorstand
1061 -)))|=(% scope="col" %)(((
1062 -IT Admin
1063 -)))|=(% scope="col" %)(((
1064 -Notiz
1065 -)))
1066 -|=(% scope="row" %)(((
1067 -Document
1068 -)))|(((
1069 -Sehen und bearbeiten von Dokumenten.
1070 -)))|(((
1071 -ALLE
1072 -)))|(((
1073 -ALLE
1074 -)))|(((
1075 -KEINE
1076 -)))|(((
1077 -Wird zusätzlich durch Berechtigungen auf Objekt-Level eingeschränkt
1078 -)))
1079 -|=(% scope="row" %)(((
1080 -Tag
1081 -)))|(((
1082 -Sehen und bearbeiten von Tags.
1083 -)))|(((
1084 -Anzeigen
1085 -)))|(((
1086 -ALLE
1087 -)))|(((
1088 -ALLE
1089 -)))|(((
1090 -Wird zusätzlich durch Berechtigungen auf Objekt-Level eingeschränkt
1091 -)))
1092 -|=(% scope="row" %)(((
1093 -Correspondent
1094 -)))|(((
1095 -Sehen und bearbeiten von Korrespondenten
1096 -)))|(((
1097 -Anzeigen
1098 -)))|(((
1099 -ALLE
1100 -)))|(((
1101 -ALLE
1102 -)))|(((
1103 -Wird zusätzlich durch Berechtigungen auf Objekt-Level eingeschränkt
1104 -)))
1105 -|=(% scope="row" %)(((
1106 -DocumentType
1107 -)))|(((
1108 -Sehen und bearbeiten von Dokument-Typen
1109 -)))|(((
1110 -Anzeigen
1111 -)))|(((
1112 -ALLE
1113 -)))|(((
1114 -ALLE
1115 -)))|(((
1116 -Wird zusätzlich durch Berechtigungen auf Objekt-Level eingeschränkt
1117 -)))
1118 -|=(% scope="row" %)(((
1119 -StoragePath
1120 -)))|(((
1121 -Sehen und bearbeiten von Speicherpfaden
1122 -)))|(((
1123 -Anzeigen
1124 -)))|(((
1125 -Anzeigen
1126 -)))|(((
1127 -ALLE
1128 -)))|(((
1129 -Wird zusätzlich durch Berechtigungen auf Objekt-Level eingeschränkt
1130 -)))
1131 -|=(% scope="row" %)(((
1132 -SavedView
1133 -)))|(((
1134 -Ansichten erzeugen und speichern
1135 -)))|(((
1136 -ALLE
1137 -)))|(((
1138 -ALLE
1139 -)))|(((
1140 -KEINE
1141 -)))|(((
1142 -\\
1143 -)))
1144 -|=(% scope="row" %)(((
1145 -PaperlessTask
1146 -)))|(((
1147 -Dateiaufgaben einsehen und löschen
1148 -)))|(((
1149 -KEINE
1150 -)))|(((
1151 -KEINE
1152 -)))|(((
1153 -ALLE
1154 -)))|(((
1155 -\\
1156 -)))
1157 -|=(% scope="row" %)(((
1158 -AppConfig
1159 -)))|(((
1160 -Konfiguration von Paperless NGX selbst
1161 -)))|(((
1162 -KEINE
1163 -)))|(((
1164 -KEINE
1165 -)))|(((
1166 -ALLE
1167 -)))|(((
1168 -\\
1169 -)))
1170 -|=(% scope="row" %)(((
1171 -UISettings
1172 -)))|(((
1173 -Persönliche Anzeigeeinstellungen ändern
1174 -)))|(((
1175 -ALLE
1176 -)))|(((
1177 -ALLE
1178 -)))|(((
1179 -ALLE
1180 -)))|(((
1181 -\\
1182 -)))
1183 -|=(% scope="row" %)(((
1184 -History
1185 -)))|(((
1186 -Dokumenten-Audit Log anzeigen oder ändern
1187 -)))|(((
1188 -Anzeigen
1189 -)))|(((
1190 -Anzeigen
1191 -)))|(((
1192 -KEINE
1193 -)))|(((
1194 -Nur für Dokumente, auf die Zugriff gewährt wurde.
1195 -)))
1196 -|=(% scope="row" %)(((
1197 -Note
1198 -)))|(((
1199 -Notizen zu Dokumenten einsehen oder ändern
1200 -)))|(((
1201 -ALLE
1202 -)))|(((
1203 -ALLE
1204 -)))|(((
1205 -KEINE
1206 -)))|(((
1207 -Nur für Dokumente, auf die Zugriff gewährt wurde.
1208 -)))
1209 -|=(% scope="row" %)(((
1210 -MailAccount
1211 -)))|(((
1212 -Mail-Accounts verwalten
1213 -)))|(((
1214 -KEINE
1215 -)))|(((
1216 -Anzeigen
1217 -)))|(((
1218 -ALLE
1219 -)))|(((
1220 -\\
1221 -)))
1222 -|=(% scope="row" %)(((
1223 -MailRule
1224 -)))|(((
1225 -Verarbeitungsregeln für eingehende Mails bearbeiten
1226 -)))|(((
1227 -KEINE
1228 -)))|(((
1229 -ALLE
1230 -)))|(((
1231 -ALLE
1232 -)))|(((
1233 -\\
1234 -)))
1235 -|=(% scope="row" %)(((
1236 -User
1237 -)))|(((
1238 -Benutzer einsehen oder verwalten
1239 -)))|(((
1240 -KEINE
1241 -)))|(((
1242 -Anzeigen
1243 -)))|(((
1244 -ALLE
1245 -)))|(((
1246 -\\
1247 -)))
1248 -|=(% scope="row" %)(((
1249 -Group
1250 -)))|(((
1251 -Gruppen einsehen oder verwalten
1252 -)))|(((
1253 -KEINE
1254 -)))|(((
1255 -Anzeigen
1256 -)))|(((
1257 -ALLE
1258 -)))|(((
1259 -\\
1260 -)))
1261 -|=(% scope="row" %)(((
1262 -ShareLink
1263 -)))|(((
1264 -Öffentliche Share-Links erstellen oder verwalten
1265 -)))|(((
1266 -KEINE
1267 -)))|(((
1268 -KEINE
1269 -)))|(((
1270 -KEINE
1271 -)))|(((
1272 -\\
1273 -)))
1274 -|=(% scope="row" %)(((
1275 -CustomField
1276 -)))|(((
1277 -Custom Fields einsehen oder verwalten
1278 -)))|(((
1279 -Anzeigen
1280 -)))|(((
1281 -Anzeigen
1282 -)))|(((
1283 -ALLE
1284 -)))|(((
1285 -\\
1286 -)))
1287 -|=(% scope="row" %)(((
1288 -Workflow
1289 -)))|(((
1290 -Workflows für neue Dokumente einsehen oder verwalten
1291 -)))|(((
1292 -KEINE
1293 -)))|(((
1294 -KEINE
1295 -)))|(((
1296 -ALLE
1297 -)))|(((
1298 -\\
1299 -)))
1300 -
1301 -=== Objekt-Berechtigungen ===
1302 -
1303 -Zusätzlich zu den globalen Berechtigungen können für alle Objekte noch Berechtigungen auf Objekt-Level konfiguriert werden. Dabei werden globale Regeln zuerst geprüft, danach zusätzlich die Objekt-Berechtigungen. Jedes Objekt (egal ob Dokument, Korrespondent, Tag, Dokumenten-Typ) hat zwei wichtige Einstellungen:
1304 -
1305 -* Owner / Eigentümer: Das Objekt gehört diesem Benutzer. Der Owner hat immer alle Berechtigungen für das Objekt
1306 -* Zusätzliche Berechtigungen:
1307 -** Es können getrennt voneinander Berechtigungen zum Anzeigen und Bearbeiten vergeben werden
1308 -** Diese Berechtigungen können jeweils für einzelne Benutzer oder für Gruppen gewährt werden
1309 -
1310 -Das sieht im Frontend beispielsweise so aus:
1311 -
1312 -[[image:attach:image-2025-8-25_10-19-25.png||thumbnail="true" height="250"]]
1313 -
1314 -{{info title="Berechtigungen"}}
1315 -Es sind grundsätzlich sowohl globale als auch objekt-spezifische Berechtigungen notwendig. Wenn ein Benutzer ein Objekt bearbeiten ansehen oder bearbeiten möchte ergibt sich daher die folgende Matrix:
1316 -
1317 -|=(% scope="col" %)(((
1318 -Globale Berechtigung
1319 -)))|=(% scope="col" %)(((
1320 -Owner
1321 -)))|=(% scope="col" %)(((
1322 -Objekt-Berechtigung
1323 -)))|=(% scope="col" %)(((
1324 -Ergebnis
1325 -)))
1326 -|(((
1327 -❌️
1328 -)))|(((
1329 -Egal
1330 -)))|(((
1331 -Egal
1332 -)))|(((
1333 -❌️
1334 -)))
1335 -|(((
1336 -✅️
1337 -)))|(((
1338 -✅️
1339 -)))|(((
1340 -Egal
1341 -)))|(((
1342 -✅️
1343 -)))
1344 -|(((
1345 -✅️
1346 -)))|(((
1347 -❌️
1348 -)))|(((
1349 -❌️
1350 -)))|(((
1351 -❌️
1352 -)))
1353 -|(((
1354 -✅️
1355 -)))|(((
1356 -❌️
1357 -)))|(((
1358 -✅️
1359 -)))|(((
1360 -✅️
1361 -)))
1362 -
1363 -Mit anderen Worten, um eine Aktion auszuführen, muss ein Benutzer (a) die globale Berechtigung haben **UND** (b) Owner sein **ODER** Objekt-Berechtigungen haben.
1364 -{{/info}}
1365 -
1366 -=== Lokale Owner ===
1367 -
1368 -Jedes Objekt in Paperless muss einen Owner haben. Damit der Owner nicht ein realer Benutzer ist, der gegebenenfalls den Vorstand / Mitgliederverwaltung oder Verein verlassen könnte, werden lokale Benutzer angelegt. Diese halten lediglich die Owner Rolle für die Ressourcen, können aber nicht für den Login verwendet werden.
1369 -
1370 -|=(% scope="row" %)(((
1371 -Benutzer
1372 -)))|=(% scope="col" %)(((
1373 -Verwendet für
1374 -)))
1375 -|=(% scope="row" %)(((
1376 -mksp-mv-owner
1377 -)))|(((
1378 -Alle Objekte (Dokumente, Dokumenttypen, Tags, Korrespondenten und Speicherpfade), die dem Use-Case **Mitgliederverwaltung** zugewiesen sind
1379 -)))
1380 -|=(% scope="row" %)(((
1381 -mksp-vs-owner
1382 -)))|(((
1383 -Alle Objekte (Dokumente, Dokumenttypen, Tags, Korrespondenten und Speicherpfade), die dem Use-Case **Vorstandspost** zugewiesen sind
1384 -)))
1385 -
1386 -=== Standard-Objekt-Berechtigungen ===
1387 -
1388 -Basierend auf den hier beschrieben Regeln werden für Objekte die folgenden Berechtigungen gesetzt:
1389 -
1390 -|=(% rowspan="2" scope="rowgroup" %)(((
1391 -Objekt
1392 -\\
1393 -)))|=(% colspan="3" scope="colgroup" %)(((
1394 -Mitgliederverwaltung
1395 -)))|=(% rowspan="7" scope="rowgroup" %)(((
1396 -\\
1397 -)))|=(% colspan="3" scope="colgroup" %)(((
1398 -Vorstandspost
1399 -)))
1400 -|=(% scope="col" %)(((
1401 -Owner
1402 -)))|=(% scope="col" %)(((
1403 -Anzeigen
1404 -)))|=(% scope="col" %)(((
1405 -Bearbeiten
1406 -)))|=(((
1407 -Owner
1408 -)))|=(((
1409 -Anzeigen
1410 -)))|=(((
1411 -Bearbeiten
1412 -)))
1413 -|=(% scope="row" %)(((
1414 -Dokument
1415 -)))|(((
1416 -mksp-mv-owner
1417 -)))|(((
1418 -Mitgliederverwaltung
1419 -)))|(((
1420 -Mitgliederverwaltung
1421 -)))|(((
1422 -mksp-vs-owner
1423 -)))|(((
1424 -Vorstand
1425 -)))|(((
1426 -Vorstand
1427 -)))
1428 -|=(% scope="row" %)(((
1429 -Dokumenttyp
1430 -)))|(((
1431 -mksp-mv-owner
1432 -)))|(((
1433 -Mitgliederverwaltung, IT Admin
1434 -)))|(((
1435 -IT Admin
1436 -)))|(((
1437 -mksp-vs-owner
1438 -)))|(((
1439 -Vorstand
1440 -)))|(((
1441 -Vorstand
1442 -)))
1443 -|=(% scope="row" %)(((
1444 -Tag
1445 -)))|(((
1446 -mksp-mv-owner
1447 -)))|(((
1448 -Mitgliederverwaltung, IT Admin
1449 -)))|(((
1450 -IT Admin
1451 -)))|(((
1452 -mksp-vs-owner
1453 -)))|(((
1454 -Vorstand
1455 -)))|(((
1456 -Vorstand
1457 -)))
1458 -|=(% scope="row" %)(((
1459 -Korrespondent
1460 -)))|(((
1461 -mksp-mv-owner
1462 -)))|(((
1463 -Mitgliederverwaltung, IT Admin
1464 -)))|(((
1465 -IT Admin
1466 -)))|(((
1467 -mksp-vs-owner
1468 -)))|(((
1469 -Vorstand
1470 -)))|(((
1471 -Vorstand
1472 -)))
1473 -|=(% scope="row" %)(((
1474 -Speicherpfad
1475 -)))|(((
1476 -mksp-mv-owner
1477 -)))|(((
1478 -Mitgliederverwaltung, IT Admin
1479 -)))|(((
1480 -IT Admin
1481 -)))|(((
1482 -mksp-vs-owner
1483 -)))|(((
1484 -Vorstand
1485 -)))|(((
1486 -IT Admin
1487 -)))
1488 -
1489 -== Workflows ==
1490 -
1491 -Paperless Workflows können zur Automatisierung verschiedener Tasks eingesetzt werden. In diesem Fall werden zwei Fälle damit abgedeckt:
1492 -
1493 -* Beim Hinzufügen der Dokumente via Webinterface **wird standardmäßig der angemeldete Nutzer als Owner des Dokuments festgelegt**. Damit haben andere Mitglieder der gleichen Gruppe (Beispielsweise Vorstand oder Mitgliederverwaltung) kein Zugriff auf die so hinzugefügten Dokumente. Aus diesem Grund setzt einer der Workflow die entsprechend notwendigen Berechtigungen.
1494 -* Einscannen von Dokumenten soll sowohl für die Mitgliederverwaltung als auch für den Vorstand möglich sein und der richtigen Gruppe zugeordnet werden. Wir haben dafür zwei unterschiedliche Ordner aus dem NAS angelegt. Der Dokumentenscanner kann Dokumente in einen der beiden Ordner legen, wir nutzen Workflows um auch hier die richtigen Berechtigungen zu setzen.
1495 -
1496 1496  = Offene Punkte =
1497 1497  
1498 1498  * Docuseal Logging + Monitoring