Scope#
Ogni operazione richiede esattamente uno scope, denominato <resource>.<action>:
shifts.read locations.write timesheets.read
GETrichiede.read.POST,PATCH,DELETErichiedono.write.La scrittura implica la lettura —
shifts.writesoddisfa ancheshifts.read, quindi non serve mai richiedere entrambi.
Il catalogo#
L’insieme concedibile è chiuso e fa parte del contratto. Eccolo per intero — una riga per risorsa, ciascuna con il proprio scope .read e .write:
Scope |
Copre |
|---|---|
|
Impostazioni del tenant (singleton). |
|
Aree all’interno di una sede. |
|
Blocchi di disponibilità dei dipendenti (comprese le ricorrenze). |
|
Definizioni delle regole delle pause. |
|
Budget del personale e obiettivi di ricavo. |
|
Dipendenti, loro appartenenze, inviti e ciclo di vita. |
|
Tipi di contratto e relativi valori predefiniti per il salario. |
|
Eventi generali (non turni) e loro partecipanti. |
|
Calendario dei giorni festivi. |
|
Report del costo del personale. |
|
Saldi delle assenze (sola lettura). |
|
Politiche di assenza e relative progressioni a livelli. |
|
Richieste di assenza e relative transizioni di esame. |
|
Sedi. |
|
Offerte di turni aperti (sola lettura su questa API). |
|
Posizioni, requisiti di qualifica e assegnazioni dei dipendenti. |
|
Turni, loro stato di pubblicazione e assegnazioni. |
|
Catalogo delle qualifiche. |
|
Offerte di scambio dei turni (sola lettura su questa API). |
|
Giornale e saldi della compensazione in tempo. |
|
Rapporti delle ore, timbrature, pause e approvazioni. |
|
Registrazione degli endpoint dei webhook e rigenerazione dei segreti. |
|
Cronologia degli eventi inviati per la riconciliazione. |
|
Regole di lavoro (compreso il blocco della compensazione in tempo dell’art. 17b). |
Per un singolo endpoint questa tabella non ti serve: ogni operazione nella Referenza API dichiara lo scope esatto che richiede, direttamente sull’operazione. Sia quel requisito sia la tabella qui sopra derivano dallo stesso valore che legge il controllo dei permessi sul server, quindi ciò che è documentato e ciò che è applicato non possono divergere.
Chiedere quelli giusti#
Gli scope vengono concessi per singolo client di integrazione al momento della registrazione, quindi chiedi ciò che l’integrazione fa realmente e nulla di più. Un export dei salari che legge le ore ottiene timesheets.read e nient’altro.
Un errore di battitura viene individuato alla registrazione, non in esecuzione: shift.read viene rifiutato con un suggerimento, invece di registrare un client che fallisce a ogni chiamata.
Per aggiungere uno scope in seguito, scrivi a support@shiftavo.com — non servono nuove credenziali.
Quando manca uno scope#
Una chiamata con un token valido ma senza l’autorizzazione richiesta è:
{
"error": {
"type": "permission_error",
"code": "insufficient_scope",
"message": "…",
"details": []
}
}
con stato 403. È distinto da un 401 (è il token stesso a non essere valido — vedi Autenticazione) e da un 404, che è anche ciò che ottieni per un record al di fuori della tua azienda, così l’esistenza non traspare mai.