Passa al contenuto principale

People & Roles (ops guide)

La sezione PEOPLE & ROLES del control plane è la gestione centrale di chi sta dentro al sistema Playroll. Vive su https://control.extrinsiccognition.com/p2e/people/... e ha quattro pagine, ciascuna per una popolazione diversa:

  • Admins — chi controlla il control plane (staff EC)
  • Operators — chi usa il control plane senza essere admin (cm, vc)
  • Players — utenti Playroll che hanno fatto Steam OAuth
  • Contributors — utenti del Contributor Portal (lato legale/pagamenti)

Tutte le pagine sono admin-only: serve crm_user_roles.role = 'admin' per accedere. Se non sei admin (cm/vc o altro), vedrai un 403.


Le tre popolazioni — perché sono separate

Sono tre cose diverse anche se la parola "utente" è la stessa.

PopolazioneIdentitàDove vive
Operators (admin / cm / vc)Email aziendalecrm_user_roles (3 admin oggi)
PlayersSteam OAuthplayroll_users + auth.users (124 oggi)
ContributorsEmail + onboarding legalesupa_portal.contributors

Gli operators non sono mai players (passano da Cloudflare Access, non fanno Steam OAuth). I contributors possono essere players (link via contributor_app_links nel portal), ma non per forza.

Non confondere

Aggiungere un operator non crea un account Playroll. Promuovere un player ad admin (cosa che il sistema non permette) non avrebbe senso: i player hanno email sintetica steam_<id>@playroll.gg, gli admin servono email vera per accedere via Cloudflare Access.


Admins

URL: /p2e/people/admins

Cosa fa un admin

  • Accede a tutto il control plane in lettura/scrittura
  • Può aggiungere/togliere altri admin e operators
  • Può modificare gruppi notifiche, mandare notifiche, vedere pagamenti, ecc.

Vincoli enforced

  • Email deve finire in @extrinsiccognition.com. Il backend rifiuta qualsiasi altro dominio per il ruolo admin. Messaggio errore: admin_role_requires_extrinsiccognition_email.
  • Un admin non può revocare sé stesso. Messaggio errore: self_revocation_blocked. È un freno per evitare di chiudersi fuori da soli. Se devi davvero revocarti, chiedi a un altro admin di farlo.
  • Un admin non può declassarsi a cm/vc. Stesso freno. Messaggio errore: self_demotion_blocked.

Aggiungere un admin

  1. Click "Add admin" in alto a destra della tabella
  2. Inserisci email nome@extrinsiccognition.com
  3. (Opzionale) Note per ricordare chi è
  4. Conferma

L'admin appare immediatamente in tabella. Può loggarsi via Cloudflare Access e vede tutte le pagine entro 60s (TTL cache role).

Revocare un admin

Click icona cestino sulla riga. Confirma. La cache del ruolo viene invalidata subito — al prossimo refresh la persona viene espulsa dal control plane.


Operators

URL: /p2e/people/operators

I due ruoli operatore disponibili:

RuoloCosa può fare
cm (community manager)Scrivere su notifications, gruppi, payment review
vc (view-only contributor)Solo lettura dashboards

Email libera (qualsiasi dominio). Pensato per partner, agenzie, contractor che non sono staff EC ma devono avere un livello di accesso ridotto.

Aggiungere un operator

  1. Click "Add operator"
  2. Inserisci email
  3. Scegli role (cm o vc)
  4. (Opzionale) Note
  5. Conferma

L'operator può accedere via Cloudflare Access entro 60s. Le pagine che vede dipendono dal role (cm scrive, vc legge soltanto).

Modificare / revocare

Click su riga → modal di edit (per cambiare role o note). Click icona cestino → revoca con conferma. L'email è chiave primaria: per cambiare l'email serve revocare e aggiungere nuovo.

suggerimento

La distinzione admin / cm / vc è per ruolo, non per gerarchia. Un admin EC potrebbe perfettamente avere anche un operator amico con role cm per una settimana di supporto durante un launch. Non c'è nulla di permanente.


Players

URL: /p2e/people/players

I 124 utenti Playroll registrati via Steam OAuth. Read-mostly: l'identità (steam_id, username, avatar) viene da Steam e non si può modificare a mano.

Cosa vedi nella tabella

ColonnaCosa significa
Steamavatar + username + steam_id
Discordusername + id (se collegato)
Tiercontributor_tier (es. pilot, founder)
Country / Langda playroll_users.country / language
Groupschip per ogni gruppo notifiche di cui è membro
Last seenMAX(app_update_resolve_audit_v1.created_at) — l'ultima volta che il launcher ha pingato il server
Joinedplayroll_users.created_at

Ricerca

Casella di ricerca in alto a destra. Match server-side su:

  • steam_username o discord_username (parziale, case-insensitive)
  • user_id o steam_id esatti se digiti un UUID o un id

Min. 2 caratteri prima che la ricerca parta (debounce 300ms).

Editare un player

Click su una riga → modal con:

  • Blocco read-only di tutti i campi identità (steam_id, discord, email, ecc.)
  • Sezione Notification groups: pill cliccabili per ogni gruppo seedato (founders, ops, beta). Click per toggle. Save applica add/remove.

Mutation possibile: solo i gruppi. Niente altro. Steam OAuth è il source of truth per l'identità; user create/delete è fuori scope.

Audit

Ogni cambio gruppi logga [users] <admin-email> groups for user <id>: +[added] -[removed] lato server.


Contributors

URL: /p2e/people/contributors

Read-only. Proiezione cross-DB su supa_portal (Contributor Portal). Mostra chi ha fatto onboarding legale, dove sta nel flusso, IBAN status.

Cosa vedi

ColonnaCosa significa
Namelegal_name come da documento
Emailquella usata per l'onboarding portal
Cityresidenza dichiarata
Taxtax_status (es. forfettario, dipendente, …)
Onboardingstato del flusso portal
IBANchip colorato: missing (rosso), pending (grigio), manual (giallo), *last4 (verde)
Cap €cap_limit_eur per anno legale
Linked"linked" verde se contributor_app_links ha un app_user_id per questa email, "portal-only" altrimenti
Createddata prima riga onboarding/application

Niente CRUD qui

Il portal è il source of truth per dati legali/KYC/IBAN. Modifiche random da qui rischierebbero di rompere la compliance. Se serve modificare un contributor:

  • Per cambi normali (email confermata, IBAN aggiornato): usare il portal
  • Per fix tecnici (es. duplicate row, dato corrotto): script SQL una-tantum

Stesso pattern dei players: 2+ caratteri, match su legal_name, email, city.


Casi d'uso comuni

"Voglio mandare una notifica solo ai founders, ma il gruppo è vuoto"

  1. Vai a /p2e/people/players
  2. Cerca il primo founder per username
  3. Click sulla riga → modal → tick founders → Save
  4. Ripeti per ogni founder
  5. Vai a /p2e/notifications → seleziona founders come group → vedi il count aggiornato

"Aggiungere Andrea (agenzia esterna) come operatore cm temporaneo"

  1. Vai a /p2e/people/operators
  2. Click "Add operator"
  3. Email: andrea@agency.com, role: cm, note: "supporto launch Q2 2026"
  4. Conferma

Andrea può loggarsi via Cloudflare Access immediatamente. Quando il supporto finisce, click cestino sulla riga.

"Verificare se un player ha completato l'onboarding legale"

  1. Vai a /p2e/people/players, cerca per username, copia l'email
  2. Vai a /p2e/people/contributors, cerca per email
  3. Vedi colonna Linked (verde = match), Onboarding, IBAN

Se vedi "portal-only" significa che ha fatto onboarding ma non ha fatto Steam OAuth nel launcher. Viceversa, se il player non appare in Contributors, non ha fatto onboarding legale.


Cosa fare se qualcosa non torna

  • 403 forbidden_admin_only su qualsiasi pagina: il tuo email non è admin. Chiedi a un altro admin di promuoverti.
  • "self_revocation_blocked" / "self_demotion_blocked": stai cercando di revocare o declassare te stesso. Per design impossibile. Chiedi a un altro admin.
  • "admin_role_requires_extrinsiccognition_email": stai cercando di promuovere un'email non-EC ad admin. Usa role cm o vc invece.
  • Modifica gruppo su un player non si riflette nel composer notifiche: refresh la pagina notifiche. La cache groups è server-side ma il composer fetcha groups all'apertura.
  • Errore 500 generico: probabile problema cross-DB (contributors usa supa_portal). Controlla console e scrivi a Marco col messaggio.

Riferimenti