Background:Qual è un buon modello per l'implementazione del controllo accessi in un server GraphQL?
Ho una serie di modelli, tra cui un utente e vari altri modelli, alcuni dei quali contengono riferimenti a un utente. Sto esponendo questi modelli per l'interrogazione tramite un'API GraphQL generata da Graffiti, supportata da un database Mongo usando l'adattatore graffiti-mongoose. La mia attuale API REST (che sto migrando a GraphQL) utilizza token Web JSON per autenticare gli utenti e ha alcune regole di autorizzazione personalizzate sul lato server per gestire il controllo degli accessi.
Problema:
vorrei limitare l'accesso agli oggetti in GraphQL basate sulla vigente utente connesso. Alcuni modelli dovrebbero essere accessibili per le letture da chiamate non autenticate. La maggior parte degli altri modelli dovrebbe essere accessibile solo all'utente che li ha creati. Qual è il modo migliore per gestire il controllo degli accessi agli oggetti tramite l'API generata da Graffiti?
In generale, ci sono buoni modelli di controllo degli accessi per GraphQL? E in particolare, ci sono dei buoni esempi o librerie per farlo con Graffiti?
Note:
Capisco che i ganci pre e post hanno been implemented per graffiti-mangusta, e che can be used fare controlli binari di base per l'autenticazione. Mi piacerebbe vedere come una logica di controllo dell'accesso più dettagliata possa essere elaborata in un'API GraphQL. In futuro, desideriamo supportare elementi come amministratori che hanno accesso a istanze di modelli create da un determinato gruppo di utenti (ad esempio utenti le cui affiliazioni includono quella dell'amministratore).
Si dovrebbe esaminare XACML e ABAC che sono modelli di controllo dell'accesso basati su attributi a grana fine che è possibile utilizzare per proteggere GraphQL e altre app –