- Menü: Dropdown "Projekt-Berechtigungen" unter Optionen mit Unterpunkten "Projekt-Zugriffe" und "Nutzer-Zugriffe" (nur SysAdmin/AppAdmin) - AppAdmin-Erkennung: Server liefert isAppAdmin-Flag im Login- und getusers-Response (applikationsspezifisch via has_permission) - Login: CurrentUserIsAppAdmin in sessionStorage speichern/entfernen - Projekt-Zugriffe: geschachtelter Treetable (Projekt → Nutzer) als reine Anzeige, Detail-Sicht aus Projekt-Maske mit Bearbeitung - Nutzer-Zugriffe: neue Komponente user_projektliste.ts, geschachtelter Treetable (Nutzer → Projekte), reine Anzeige - Server: neuer Endpunkt GET /xhr/projektuser/listall (nur AppAdmin/SysAdmin) - Server: get_all_projekt_users() mit Batch-Query für Projekte und User - Treetable-Widget: Platzhalter-Pfeil bei kinderlosen Nodes nur wenn Geschwister mit Kindern existieren (hasSiblingsWithChildren) - Datei projekt_user.ts umbenannt in projekt_userliste.ts (konsistent mit user_projektliste.ts) Generated by Mistral Vibe. Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
84 lines
2.6 KiB
TypeScript
84 lines
2.6 KiB
TypeScript
import m from "mithril"
|
|
|
|
/**
|
|
* Datenmodell für eine Projekt-User-Zuordnung (Sichtbarkeit).
|
|
*
|
|
* Die Felder id, projekt_id und user_id sind die ORM-Spalten der
|
|
* Verknüpfungstabelle 'projekt_users'. Die Felder userid, username und
|
|
* email werden serverseitig aus der Auth-Datenbank aufgelöst und im JSON
|
|
* ergänzt.
|
|
*/
|
|
export interface iProjektUser {
|
|
id: number
|
|
projekt_id: number
|
|
user_id: number
|
|
userid: string
|
|
username: string
|
|
email: string
|
|
}
|
|
|
|
/**
|
|
* Erweitertes Interface für die Übersichtssicht "Nutzer-Zugriffe".
|
|
* Enthält zusätzlich den Projektnamen, der serverseitig aus der
|
|
* Projekt-Relationship aufgelöst wird.
|
|
*/
|
|
export interface iProjektUserWithProjekt extends iProjektUser {
|
|
projektname: string
|
|
}
|
|
|
|
/* ------------------------------------------------------------------ */
|
|
/* REST-API-Aufrufe (Client-Seite) */
|
|
/* ------------------------------------------------------------------ */
|
|
/* Die folgenden Funktionen kapseln die Kommunikation mit den */
|
|
/* serverseitigen REST-Endpunkten (/xhr/projektuser/*). */
|
|
/* ------------------------------------------------------------------ */
|
|
|
|
/**
|
|
* Basis-Pfad der ProjektUser-REST-Endpunkte.
|
|
*/
|
|
const PROJEKTUSER_REST_BASE = "/xhr/projektuser"
|
|
|
|
/**
|
|
* Lädt die Liste der einem Projekt zugeordneten Nutzer vom Server.
|
|
*/
|
|
export function fetchProjektUsers(projektId: number): Promise<iProjektUser[]> {
|
|
return m.request({
|
|
method: "GET",
|
|
url: PROJEKTUSER_REST_BASE + "/list",
|
|
params: {projekt_id: projektId}
|
|
}).then((result) => result as iProjektUser[])
|
|
}
|
|
|
|
/**
|
|
* Ordnet einen Nutzer einem Projekt zu.
|
|
*/
|
|
export function addProjektUserREST(projektId: number, userId: number): Promise<void> {
|
|
return m.request({
|
|
method: "POST",
|
|
url: PROJEKTUSER_REST_BASE + "/add",
|
|
body: {projekt_id: projektId, user_id: userId}
|
|
}).then(() => undefined)
|
|
}
|
|
|
|
/**
|
|
* Entfernt die Zuordnung eines Nutzers zu einem Projekt.
|
|
*/
|
|
export function removeProjektUserREST(projektId: number, userId: number): Promise<void> {
|
|
return m.request({
|
|
method: "DELETE",
|
|
url: PROJEKTUSER_REST_BASE + "/remove",
|
|
params: {projekt_id: projektId, user_id: userId}
|
|
}).then(() => undefined)
|
|
}
|
|
|
|
/**
|
|
* Lädt alle Projekt-User-Zuordnungen inkl. projektname und Nutzerdaten.
|
|
* Nur für AppAdmin/SysAdmin.
|
|
*/
|
|
export function fetchAllProjektUsers(): Promise<iProjektUserWithProjekt[]> {
|
|
return m.request({
|
|
method: "GET",
|
|
url: PROJEKTUSER_REST_BASE + "/listall"
|
|
}).then((result) => result as iProjektUserWithProjekt[])
|
|
}
|