Vai al contenuto

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.view e team.manage sono 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_admin non 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>.ics con le proprie scadenze.
  • Report (TeamReportService, permesso team.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 ha team.manage anche 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.