Projekt-Sichtbarkeit: Nutzer-Zuordnung, projektbezogene Filterung und Schreibschutz
- Neues Modell ProjektUser (projekt_users) für projektbezogene Sichtbarkeit
- Migration V01_09 legt Tabelle an (keine Initial-Befüllung)
- CRUD-Logik für Projekt-User-Zuordnungen mit Cross-DB-User-Auflösung
- Serverseitige Sichtbarkeits-Filterung: Projekt-Liste/Get filtert nach
projekt_users-Zuordnung für Nicht-SysAdmin/Nicht-AppAdmin
- Auto-Assignment: Ersteller wird bei Projektanlage automatisch zugeordnet
- Sichtbarkeits-Filterung auf CallLog und Kontaktadresse erweitert
(Liste und Einzelabruf)
- Schreibschutz: Alle Schreib-Endpunkte (update/delete) für Projekt,
Kontaktadresse und CallLog prüfen Projekt-Zuordnung vor der Ausführung
- Hilfsfunktionen _get_visible_user_id() und _require_projekt_access()
zur Kapselung der wiederkehrenden Prüfungen
- REST-Endpunkte /xhr/projektuser/{list,add,remove};
Schreib-Endpunkte mit @authorisation_required([]) als Erweiterungspunkt
- Client: Neues Modell projekt_user.ts, Listen-Komponente mit Modal
(Select-Widget), Button in Projekt-Maske, Route registriert
- Build aktualisiert (tsc + rollup)
- AGENTS.md: Vorgaben für projektbezogene Sichtbarkeit dokumentiert
Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
This commit is contained in:
1 parent
b2f8684afb
commit
4cb0084066
12 files changed
+758
-25
No files matched your search
@@ -0,0 +1,63 @@
|
||||
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
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------ */
|
||||
/* 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)
|
||||
}
|
||||
Reference in new issue
Block a user