Registrazione Dispositivi e Operatori
Panoramica
Ogni dispositivo POS (cassa, cameriere, stock app) deve essere registrato sulla piattaforma prima di poter operare. La registrazione avviene tramite un codice OTP generato dall'amministratore. Dopo l'enrollment, gli operatori accedono al dispositivo con un PIN numerico.
Flusso di Registrazione Dispositivo
Il flusso coinvolge due attori: l'amministratore (admin console) e il dispositivo (app Flutter).
1. Generazione OTP (Admin Console)
L'amministratore genera un codice OTP dalla admin console:
curl -X POST "https://api.example.com/api/licensing/otp/generate" \
-H "Authorization: Bearer <ADMIN_TOKEN>" \
-H "Content-Type: application/json" \
-d '{
"tenantId": "ristorante-roma",
"deviceName": "Cassa 1",
"licenseLevel": "standard"
}'
Risposta: { "otp": "AB-1234", "qrCode": "<JWT_PAYLOAD>", "expiresIn": 300 }.
L'OTP ha validita di 5 minuti ed e salvato in Redis. Il campo qrCode contiene un JWT firmato utilizzabile per scansione QR.
2. Enrollment Dispositivo (App Flutter)
Al primo avvio, l'app mostra una schermata di attivazione. L'operatore inserisce il codice OTP oppure scansiona il QR code:
curl -X POST "https://api.example.com/api/licensing/enroll" \
-H "Content-Type: application/json" \
-d '{
"otp": "AB-1234",
"deviceInfo": {
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"platform": "windows",
"model": "Surface Pro 9",
"name": "Cassa 1"
}
}'
L'endpoint e pubblico (non richiede autenticazione). Il backend valida l'OTP, registra il dispositivo nella collezione devices e ritorna un Device Token JWT HS256 con validita di 1 anno, insieme alla configurazione del tenant (URL server, credenziali NATS, feature flags).
3. Rinnovo Token
Il token dispositivo puo essere rinnovato tramite POST /licensing/refresh senza bisogno di un nuovo OTP, purche il dispositivo sia ancora registrato e attivo.
Creazione Operatori
Gli operatori sono utenti di cassa che accedono tramite PIN numerico. Vengono gestiti dal servizio operator-management.
Creazione Operatore (Admin Console)
curl -X POST "https://api.example.com/api/operator-management" \
-H "Authorization: Bearer <ADMIN_TOKEN>" \
-H "Content-Type: application/json" \
-d '{
"operatorCode": "OP001",
"firstName": "Mario",
"lastName": "Rossi",
"pin": "1234",
"operatorRole": "cassiere",
"permissions": ["orders.create", "orders.complete", "cash.movements"]
}'
Il PIN viene hashato con SHA-256 prima del salvataggio. La lunghezza minima predefinita e 4 cifre, massima 8.
Login Operatore (App Flutter)
L'operatore inserisce il PIN sulla schermata di login del dispositivo gia registrato:
curl -X POST "https://api.example.com/api/operators/login" \
-H "Authorization: Bearer <DEVICE_TOKEN>" \
-H "Content-Type: application/json" \
-d '{ "pin": "1234", "deviceId": "550e8400-...", "clockIn": true }'
Il backend genera un Operator Token JWT HS256 con validita di 8 ore. Se clockIn: true, viene creata automaticamente una sessione operatore per il tracciamento presenze.
Livelli di Licenza
Il campo licenseLevel determina le funzionalita disponibili sul dispositivo:
| Livello | Funzionalita |
|---|---|
basic | Ordini, pagamenti, stampa |
standard | Basic + gestione tavoli, camerieri, magazzino |
premium | Standard + analytics, fidelity, kiosk |
FAQ
D: Cosa succede se l'OTP scade prima che il dispositivo lo inserisca? R: L'OTP viene rimosso da Redis dopo 5 minuti. L'amministratore deve generarne uno nuovo dalla admin console.
D: Un dispositivo puo essere registrato su piu tenant? R: No. Ogni dispositivo e associato a un singolo tenant. Per cambiare tenant, il dispositivo deve essere de-registrato e ri-registrato con un nuovo OTP.
D: Come disattivo un operatore?
R: Impostare isActive: false tramite l'admin console. Il login via PIN verra rifiutato immediatamente, anche se l'operatore ha un token ancora valido.
Vedi Anche
- Token HS256 vs RS256 -- Dettagli sui tipi di token generati
- Configurazione Keycloak -- Setup autenticazione amministrativa
- Installazione Cassa -- Guida completa installazione dispositivo