Shop Projekt - Dokumentation

Shop LDM

Teil 02: Benutzer und Rechte

Dieses Modul bildet das Benutzer- und Rechte-Management des Shops ab.

Es unterscheidet zwischen Privat- und Geschäftskunden sowie internen Rollen (z. B. Admin, Support, Moderator).

Zusätzlich enthält es ein Audit- und Validierungssystem, um Änderungen im Shop nachvollziehbar zu machen und Freiwilligen ein Belohnungssystem bereitzustellen.

🗺️ Stufe 0 | 📚 Aktuell | 📟 2026 06 15 | 📍 Datenbank - Benutzer

  • User_role: Rollen der Benutzer das mit Rechten verknüpft sind.
  • User_status: Status der Benutzer im System.
  • Benutzer: Der konkrete Benutzer im System.
  • User_attribut: Attribute der Benutzer im System.
  • Adresse: Adressen der Benutzer im System.
  • Target: Visiert eine Ziel Tabelle an für eine action eines Benutzers.
  • Action: Definiert die Aktion die ein Benutzer auf eine Target Tabelle ausführt.
  • Manager_rights: Verknüpft einen Benutzer mit einem Target und einer Action und definiert die Rechte.
  • Manager_log: Logt alle Änderungen eines Benutzers an einem Target mit einer Action.
  • Review: Ermöglicht die Bewertung von Änderungen durch andere Benutzer.
  • Validation: Validiert die Änderungen durch Reviews und gibt Feedback an den Benutzer zurück.
  • Reward_log: Logt alle Belohnungen für einen Benutzer basierend auf seinen Aktionen und deren Bewertungen.

Damit bietet dieses Modul die Grundlage für Sicherheit, Moderation und Community-Management. Es stellt sicher, dass alle Änderungen im System nachvollziehbar sind und gleichzeitig positive Anreize für Mitarbeit geschaffen werden.

User_role (Benutzer Rollen)

Zweck: Definiert die verschiedenen Rollen im System.

Felder:
    - rol_ID       (PK)
    - rol_key      CHAR(1) UNIQUE                  -- Rollenabkürzung (z.B. 'A' für Admin)
    - rol_name     VARCHAR(50) UNIQUE              -- Rollenname (für Entwickler)

Hinweis: Die Anzeige wird an Hand des Keys übersetzt.

User_status (Benutzer Status)

Zweck: Verwaltung des Benutzerstatus (inkl. Löschstatus).

Felder:
    - ust_ID       (PK)
    - ust_key      CHAR(1) UNIQUE                  -- Statusabkürzung
                                                   -- A = Activ
                                                   -- N = Nicht bestätigt)
                                                   -- D = Gelöscht
                                                   -- R = Passwort erneuern
    - ust_name     VARCHAR(100) UNIQUE             -- Statusname (für Entwickler)

User (Benutzer)

Zweck: Zentrale Verwaltung der Benutzer mit allen Kerninformationen.

Felder:
    - u_ID              (PK)
    - rol_ID            (FK → user_role.rol_ID) DEFAULT 6 -- Rolle (Standard: User)
    - ust_ID            (FK → user_status.ust_ID) DEFAULT 2 -- Status (Standard: Nicht bestätigt)
    - u_name            VARCHAR(50) UNIQUE             -- Benutzername (eindeutig) 
    - u_avatar          VARCHAR(255)                   -- Profilbild (Dateiname mit Endung)
    - u_fname           VARCHAR(50)                    -- Vorname
    - u_lname           VARCHAR(50)                    -- Nachname
    - u_mail            VARCHAR(100) NOT NULL          -- E-Mail
    - u_phone           VARCHAR(20)                    -- Telefonnummer
    - u_password        VARCHAR(255) NOT NULL          -- Passwort (gehasht)
    - u_trust_level     INT DEFAULT 0                  -- Vertrauensstufe (für Mitwirkende)
    - u_open_fees       DECIMAL(10,2) DEFAULT 0.00     -- Noch offene Gebühren
    - u_reward_point    INT DEFAULT 0                  -- Belohnungspunkte für Freiwillige
    - u_trigger_freq    INT DEFAULT 10                 -- Maximale Trigger pro Runde

Indexe:
    - idx_user_status (ust_ID)
    - idx_user_role (rol_ID)
    - idx_user_role_status (rol_ID, ust_ID)

Hinweis: Privat- und Geschäftskunden werden durch die Rolle unterschieden.

User_attribut (Benutzer Attribute)

Zweck: Erweiterbare Tabelle für zusätzliche Attribute wie temporäre Tokens oder weitere Informationen.

Felder:
    - uat_ID       (PK)
    - u_ID         (FK → user.u_ID)
    - uat_key      VARCHAR(100)                        -- Attribut-Schlüssel (info, token, firmname, preferences...)
    - uat_value    TEXT                                -- es können auch mehre werte mit einem Separator gespeichert werden
    - UNIQUE (u_ID, uat_key)

Hinweis: Kann später mit einer Lookup-Tabelle attribute_type verbessert werden.

Adress (Adressen)

Zweck: Speicherung der Adressinformationen der Benutzer.

Felder:
    - adr_ID            (PK)
    - cun_ID            (FK → country.cun_ID)          -- Wird in shipping_tb verknüpft
    - u_ID              (FK → user.u_ID)
    - adr_name          VARCHAR(100)                   -- Adress-Name (z.B. 'Zuhause', 'Büro')
    - adr_line_option   VARCHAR(255)                   -- Zusatzzeile
    - adr_street        VARCHAR(255) NOT NULL          -- Straße
    - adr_hous_num      VARCHAR(10) NOT NULL           -- Hausnummer
    - adr_zipcode       VARCHAR(10) NOT NULL           -- PLZ
    - adr_locality      VARCHAR(255) NOT NULL          -- Ort
    - adr_type          CHAR(1) NOT NULL               -- M = Hauptadresse, B = Rechnungsadresse, D = Lieferadresse

Target (Zieltabellen)

Zweck: Definiert, auf welche Entität (Tabelle) ein Benutzer zugreifen darf.

Felder:
    - tar_ID         (PK)
    - tar_tb_name    VARCHAR(50)                       -- Tabellenname (z.B. 'tb_category', 'tb_product')

Action (Aktionen)

Zweck: Definiert, welche Aktion ein Benutzer ausführen darf.

Felder:
    - act_ID            (PK)
    - act_name          VARCHAR(50)                    -- Aktionsname (z.B. 'create', 'update', 'delete')
    - act_reward_value  INT DEFAULT 0                  -- Belohnungspunkte für diese Aktion

Manager_rights (Rechteverwaltung)

Zweck: Verwalten die Rechte der Benutzer auf Eintrags- oder Tabellenebene mit zeitlicher Gültigkeit.

Felder:
    - mgr_ID            (PK)
    - u_ID              (FK → user.u_ID)
    - tar_ID            (FK → target.tar_ID)           -- Bereich
    - tar_tb_ID         INT NULL                       -- Konkrete Eintrags-ID (optional)
    - mgr_right_level   INT NOT NULL                   -- 0=Viewer, 1=Editor, 2=Moderator, 3=Admin
    - mgr_trust_level   INT DEFAULT 0                  -- Dynamisch berechnet
    - mgr_valid_from    DATETIME NOT NULL              -- Gültig ab
    - mgr_valid_to      DATETIME DEFAULT NULL          -- Gültig bis (NULL = unbegrenzt, noch nicht definiert)

Manager_log (Änderungsprotokoll)

Zweck: Lückenlose Protokollierung von Änderungen inkl. Vorher/Nachher-Werten.

Felder:
    - mgl_ID            (PK)
    - u_ID              (FK → user.u_ID)               -- wer hat die Aktion gemacht
    - tar_ID            (FK → target.tar_ID)           -- Auf welches Ziel
    - tar_tb_ID         INT NULL                       -- Optionale konkrete Eintrags-ID
    - act_ID            (FK → action.act_ID)           -- Welche Aktion
    - old_value         TEXT                           -- Vorheriger Zustand (optional)
    - new_value         TEXT                           -- Neuer Zustand (optional)
    - mgl_details       TEXT                           -- JSON mit Zusatzinfos (z.B. Metadaten)
    - mgl_timestamp     DATETIME DEFAULT CURRENT_TIMESTAMP

Review (Bewertungen)

Zweck: Bewertungen von Änderungen zur Qualitätssicherung.

Felder:
    - rev_ID            (PK)
    - mgl_ID            (FK → manager_log.mgl_ID)   	-- zu welchem Log-Eintrag
    - u_ID              (FK → user.u_ID)               -- Wer bewertet
    - rev_point         INT                            -- Bewertungspunktzahl z. B. 1–10
    - rev_comment       TEXT                           -- Optionale Begründung

Hinweis: Bewertungen dürfen nicht belohnt werden, das gibt falsche Anreize.

Validierung (Änderungen)

Zweck: Validierungsstatus von Änderungen.

Felder:
    - val_ID            (PK)
    - rev_ID            (FK → review.rev_ID)           -- Welche Review hat beeinflusst
    - u_ID              (FK → user.u_ID)               -- Wer validiert
    - mgl_ID            (FK → manager_log.mgl_ID)      -- Welche Aktion wird validiert
    - val_status        CHAR(1)                        -- O=Open, P=Pending, V=Validated, E=Exam, R=Rejected
    - val_timestamp     DATETIME DEFAULT CURRENT_TIMESTAMP

Reward_log (Nachvollziehbarkeit)

Zweck: Belohnungssystem für Freiwillige, die valide und erfolgreiche Beiträge leisten.

Felder:
    - rel_ID            (PK)
    - mgl_ID            (FK → tb_manager_log)          -- Welche Aktion wird belohnt
    - u_ID              (FK → tb_user)                 -- Wer wird belohnt
    - val_ID            (FK → tb_validation)           -- Welche Validierung beeinflusst die Belohnung
    - act_ID            (FK → tb_action)               -- Welche Aktion wird belohnt

Hinweis: Es werden nur die belohnt, die etwas erfolgreich beigetragen haben.