API REST per diversi ruoli utente in un'applicazione SAAS

1

Hai bisogno di aiuto per l'autorizzazione / autorizzazione di un'API REST per un'app SAAS.

Avevo fatto un prototipo di un'app SAAS e per le autorizzazioni del client SAAS, avrei impostato l'API per richiedere un'intestazione chiamata CLIENT-ID . In questo modo, l'API filtra tutte le visualizzazioni dal Client connesso. Questa intestazione è obbligatoria.

La prossima cosa che sto testando è la creazione del back-end Super Admin e sto pensando che il modo migliore sia utilizzare le stesse API, ma poi avere i permessi di controllo appropriati.

Ora il super amministratore dovrebbe essere in grado di "lavorare su più client" ad es. quando fanno una richiesta di GET per /clients , dovrebbero essere in grado di vedere un elenco di tutti i client rispetto a un amministratore cliente che vedrebbe solo il proprio coz del client che l'intestazione CLIENT-ID filtrerebbe per garantire che la vista restituisca il risultati corretti Per consentire al Super Admin di fare ciò, devo rendere l'intestazione CLIENT-ID non obbligatoria per il loro ruolo?

Quindi il mio problema è, come posso fornire un'API coerente per fornire entrambi i tipi di ruoli?

Opzione 1:

Per ogni API, devo verificare il ruolo dell'utente, se è un ruolo Super Admin, quindi salta l'applicazione dell'intestazione CLIENT-ID . È fattibile. Il problema è che, se il Super Admin vuole ottenere un singolo client, ora devo richiedergli di fornire l'intestazione CLIENT-ID o devo introdurlo come parametro di filtro. Il mio problema qui ora è che ho degli scenari extra da controllare e sto pensando di non aver nemmeno pensato a tutti gli scenari possibili.

Opzione 2:

Crea diverse visualizzazioni REST per l'amministratore. Questo però duplica tonnellate di codice e non è bello.

Quindi sto gravitando verso l'opzione 1, ma sembra diventare complessa con ogni scenario diverso. O non c'è alternativa e devo solo cuocere in questi scenari?

Sto costruendo le API usando Django Rest Framework così anche qualsiasi puntatore specifico per il framework sarebbe benvenuto.

    
posta lukik 02.03.2018 - 04:07
fonte

1 risposta

1
  • Vai con l'opzione 2.
  • Elimina l'intestazione CLIENT-ID . Non è sicuro.
  • Rendi /clients visibile solo ai Super-Admins ed elenca tutti i client.
  • Sposta l'ID cliente all'URL, quindi ad es. %codice%. Solo il Super-amministratore può accedere anche a questi
  • Crea un alias come /clients/12345 utilizzato da ogni amministratore client.
  • Quando arriva una richiesta a /my-client , controlla le credenziali dell'utente per vedere a quale client corrispondono. Sto assumendo in base alla tua domanda che un amministratore del cliente abbia una corrispondenza 1-a-1 con un cliente. Se un amministratore client può amministrare più di un cliente, dagli accesso a una versione filtrata di /my-client .

Qualsiasi codice comune deve essere condiviso tra i tre tipi di risorsa, /clients , /clients e /clients/ID . Il codice di condivisione è una parte fondamentale della programmazione e non dovresti mai duplicare il codice.

    
risposta data 05.03.2018 - 17:56
fonte

Leggi altre domande sui tag