- 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>
25 lines
726 B
TypeScript
25 lines
726 B
TypeScript
import { iUserApp } from "./applications"
|
|
import { iRole } from "./roles"
|
|
|
|
export interface iUser {
|
|
id: number
|
|
userid: string
|
|
username: string
|
|
password: string
|
|
email: string
|
|
telefon: string
|
|
isSysAdmin: boolean
|
|
isAppAdmin: boolean
|
|
userapps: iUserApp[]
|
|
}
|
|
|
|
export function hasAppRole(user: iUser, appid: number, roleid: number) {
|
|
let userapp: iUserApp = user.userapps.find((userapp: iUserApp) => {return userapp.appid == appid})
|
|
if (userapp != undefined) {
|
|
let userapprole: iRole = userapp.userapp_roles.find((role: iRole) => {return role.id == roleid})
|
|
if (userapprole != undefined) {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
} |