Team e ruoli¶
Quasi tutto ciò che un utente può fare in GesTask dipende dal ruolo che ha nel team della risorsa. Questa pagina descrive team, ruoli e matrice dei permessi; il meccanismo RBAC che li applica è in Sicurezza.
Modelli¶
| Modello | Tabella | Note |
|---|---|---|
Team |
teams |
name, description, personal_user_id (valorizzato solo negli spazi personali). Va nel cestino. |
TeamMember |
team_members |
Chiave (team_id, user_id), role e board_sort, l'ordinamento delle bacheche scelto dal membro (vedi Bacheche). |
TeamCustomRole |
team_custom_roles |
Ruolo personalizzato del team. Va nel cestino. |
TeamPermission |
team_permissions |
Eccezioni alla matrice predefinita: (team_id, role, permission, allowed). |
Ruoli di team¶
I ruoli predefiniti sono viewer, member, editor e team_admin. Un ruolo
personalizzato è un TeamCustomRole e in team_members.role compare come
custom:<id>: non è un ruolo RBAC, è solo un valore che la matrice dei permessi
sa interpretare. Il nome è unico nel team (compresi i ruoli nel cestino) e un
ruolo con membri non si elimina.
Permessi¶
I permessi di team sono sette. Senza eccezioni configurate valgono questi:
| Permesso | Cosa consente | viewer | member | editor | team_admin |
|---|---|---|---|---|---|
board.view |
vedere bacheche e task | ✓ | ✓ | ✓ | ✓ |
task.create |
creare task | ✓ | ✓ | ✓ | |
task.update |
modificare task, gestire riunioni | ✓ | ✓ | ✓ | |
task.move |
spostare task fra stati | ✓ | ✓ | ✓ | |
tag.manage |
gestire le etichette della bacheca | ✓ | ✓ | ||
board.manage |
configurare la bacheca | ✓ | |||
team.manage |
gestire team, membri, ruoli, permessi | ✓ |
common/services/TeamPermissionResolver è l'unica autorità su "il ruolo X può
fare Y nel team Z":
board.vieweteam.managesono bloccati per i ruoli predefiniti: non si possono cambiare, così nessuno resta chiuso fuori dal proprio team;- per il resto vale l'eccezione salvata in
team_permissions, altrimenti il valore predefinito; - un ruolo personalizzato parte senza permessi e si configura per intero;
saveMatrix()salva solo le celle diverse dal predefinito.
La matrice si modifica dalla pagina del team (TeamController::actionPermissions)
o con PUT /v1/teams/{uuid}/permissions.
Membri¶
TeamMembershipService gestisce team, membri e ruoli personalizzati:
- chi crea un team ne diventa
team_admin; creare team è riservato al super amministratore; - l'ultimo
team_adminnon si può declassare né rimuovere; - negli spazi personali non si aggiungono membri;
- ogni cambio avvisa gli amministratori (vedi Notifiche);
- la ricerca di persone da aggiungere trova utenti attivi per inizio del nome
utente o email esatta, e maschera l'email (
ab•••@dominio) se non è stata scritta per intero.
Allineamento dei ruoli RBAC¶
syncUserRbacRoles($userId) assegna all'utente un solo ruolo RBAC di team,
il più alto fra quelli che ha nei vari team (teamViewer < teamMember <
teamEditor < teamAdmin; un ruolo personalizzato conta come teamAdmin).
Il ruolo RBAC rende i permessi raggiungibili; se valgono in un certo team lo
decide TeamMemberRule. Va chiamato dopo ogni cambio di appartenenza (lo fa il
servizio).
Visibilità¶
Un team è visibile solo ai suoi membri, super amministratori compresi.
TeamVisibility è il punto unico per saperlo (teamIds(), canSee(),
taskCondition()).
L'eccezione sono gli account in params['teamOverseers']: vedono tutti i team,
anche gli spazi personali, ma in sola lettura (TeamMemberRule concede loro
solo board.view dove non sono membri). Possono anche gestire i membri tramite
TeamMembershipService::canManage().
Spazi personali¶
PersonalBoardService::ensureFor() crea per ogni utente un team "Personale",
con lui solo come team_admin, e una bacheca "La mia bacheca". Lo crea alla
registrazione o, per gli account esistenti, alla prima visita dell'elenco
bacheche; non lo ricrea se è nel cestino.
Gli spazi personali sono esclusi dagli elenchi dei team e dalla gestione, anche nel pannello di amministrazione. Sono l'unico posto in cui un utente normale può eliminare task.
Calendario e report di team¶
- Calendario (
CalendarController): quello personale mostra le task assegnate, le proprie assenze e le riunioni a cui si partecipa; quello di team mostra task, assenze dei membri e riunioni del team. Il calendario di team richiede di essere membri: gli overseer non entrano. - Feed iCal: ogni utente può generare dal profilo un indirizzo
calendar-feed/<token>.icscon le proprie scadenze. - Report (
TeamReportService, permessoteam.manage): su 7, 30 o 90 giorni mostra task create e concluse per settimana, tempi di attraversamento, carico per persona, lavoro per stato e ore registrate. Si esporta in CSV. - Report ore (
TimesheetService,TimesheetController): le registrazioni di lavoro, manuali e del conteggio automatico, per persona e bacheca in un periodo, con esportazione CSV riga per riga. Ognuno vede le proprie ore nei suoi team, chi hateam.manageanche quelle dei colleghi di quel team, gli overseer tutto. Il filtro per persona conta solo per chi vede le ore degli altri. - Allarme assenze (
LeaveAbsenceAlertService): nel cruscotto di team segnala i giorni dei prossimi 30 in cui è assente almeno metà del team.