Vai al contenuto

People — Dettaglio utente

La pagina Dettaglio utente (/dashboard/users/:id) mostra il profilo completo di un Paradigmino, suddiviso in sezioni indipendenti.

Esperienza utente

Sezioni del profilo

Sezione Contenuto
Header Foto, nome, azioni rapide
Informazioni generali Dati lavorativi, posizione, BU
Informazioni personali Dati anagrafici e di contatto
Contratti Storico contrattuale
Skills Competenze associate
Progetti Progetti assegnati

Cosa si può fare

  • Consultare tutte le sezioni (accesso in lettura per utenti autorizzati)
  • Modificare il profilo se canManageUsers() oppure se si sta visualizzando il proprio profilo (isSelf)
  • Gestire contratti e skills (aggiunta/rimozione): in base alle policies dedicate / gestione utenti
  • Aprire dialog di aggiornamento foto e campi principali dall'header

Limitazioni

Azione canManageUsers() Self (proprio profilo) Altri utenti
Visualizzare sezioni Sì Sì Sì
Modificare generali/personali Sì Sì No
Gestire contratti Sì (policies) No No
Aggiungere skills Sì (policies) No No
Dialog aggiornamento header Sì Sì No

Vedi Accesso e ruoli.

Dettaglio tecnico

Modello permessi

UserDetailComponent calcola:

  • canManageUsers → policiesService.canManageUsers() (persons.create)
  • isSelf → confronto batch.general.email con authService.isSelf(email)

Se lo slice general non include l'email (ACL), isSelf resta false.

Caricamento sezioni

userDetailResolver pre-fetcha un'unica GET /persons/:id/info?types=profile,workload,general,personal,contracts,skills,projects prima dell'attivazione (stesso ruolo del resolver di team/progetto). Breadcrumb, header e sezioni leggono gli slice da data.person / input person. Non ci sono GET ?type= di bootstrap: quelle restano solo come fallback se uno slice manca dall'ACL.

Dopo un salvataggio la pagina rifà il batch (loadBatchInfo) per aggiornare gli slice. Il catalogo globale GET /skills non parte al load: solo all'apertura di AddSkillDialogComponent (con skeleton) o in edit/add di SkillsCard. SkillService.getSkills() cachea con shareReplay(1).

Dialog skills

AddSkillDialogComponent è orchestrato da AddSkillDialogService (stato condiviso per apertura/chiusura). All'apertura scarica il catalogo e mostra app-loading-content + app-skeleton finché i dati non sono pronti.

flowchart LR
  R[userDetailResolver] -->|types= batch| UD[UserDetailComponent]
  UD -->|general.email| IS{isSelf?}
  IS -->|sì/no + canManageUsers| SEC[Sezioni editabili]
  SEC --> GI[GeneralInfo]
  SEC --> PI[PersonalInfo]
  SEC --> UC[UserContracts]
  SEC --> US[UserSkills]
  SEC --> UP[UserProjects]

File principali

File Ruolo
src/resolvers/user-detail.resolver.ts Pre-fetch GET /persons/:id/info?types=... prima dell'attivazione
src/pages/user-detail/user-detail.component.ts Orchestrazione, batch ST-08 e permessi
src/components/user-detail/ Sezioni profilo
src/services/people.service.ts API per sezione
src/services/policies.service.ts ACL UI
src/services/add-skill-dialog.service.ts Stato dialog skills