Sto provando a progettare una piccola piattaforma web che ospiterà diverse "applicazioni", con un pool di utenti comune. La mia riflessione è ora focalizzata sul sistema di autorizzazione.
Definisco un'applicazione come un'interfaccia che consente agli utenti di eseguire CRUD e più operazioni personalizzate su un insieme di risorse. Io tendo a preferire modellare un'applicazione come una raccolta di servizi web RESTful da consumare da vari front-end.
Mi piacerebbe davvero generalizzare il sistema di autorizzazione e renderlo agnostico alle applicazioni; Sto pensando di implementarlo come un servizio web, sfruttando database di documenti non strutturati.
Supponendo che:
- Un servizio di gestione utenti e gruppi è disponibile per lo sviluppatore dell'applicazione;
- L'ambito di qualsiasi applicazione sarebbe limitato per eseguire CRUD e più operazioni personalizzate sulle risorse, come indicato in precedenza;
La mia idea è di fornire agli sviluppatori l'accesso in lettura / scrittura a una struttura come questa:
[{
"Application":"Application1",
"Ressource":"ResourceType1",
"id":"123",
"read":{
"whitelist_group_ids":[ 2 ],
"whitelist_user_ids":[ 1 ],
"blacklist_users_ids":[ 2 ]
},
"CustomOperation1":{
"whitelist_group_ids":[ * ],
"whitelist_user_ids":[ 1, 2 ],
"blacklist_users_ids":[ 3 ]
}
},{
"Application":"Application1",
"Ressource":"ResourceType2",
"id":"13",
"read":{
"whitelist_group_ids":[ * ],
"whitelist_user_ids":[ 1 ],
"blacklist_users_ids":[ 2 ]
},
"CustomOperation2":{
"whitelist_group_ids":[ 2 ],
"whitelist_user_ids":[ 1, 2 ],
"blacklist_users_ids":[ 3 ]
}
}]
Saranno quindi in grado di archiviare, controllare e aggiornare le loro restrizioni di accesso su richiesta;
Quali sarebbero i difetti di un simile approccio? Esiste una strategia standard per raggiungere qualcosa di simile a quello che ho descritto?