[Partenaires] Spécification droits d'accès via l'API
Après discussion en interne il y a deux manières et donc deux budgets permettant de faire cela.
Une solution dont l'administration passerait forcément par un changement dans le code et une migration (légère) de données serait de:
- Exploiter le mode "classique" client grant credential d'OIDC
- En prévoyant pour chaque partenaire la création d'un compte utilisateur
- En associant à ce compte utilisateur un clientID et clientSecret OIDC
- Prévoir la création de "groupes" via le back-office de Django type:
- Partners_light
- Partners
- Full_access
- Associer les utilisateurs de chaque partenaire à ces groupes
- Découper le modèle de données des acteurs/initiatives/etc en sous-modèles en fonction de ces groupes:
- un sous-modèle donné donnant donc accès à toutes les propriétés qu'il contient à partir du moment ou la bonne permission lui est assigné
- Associer soit via une classe de permission spécifique, soit via le back-office, les bonnes permissions sur les modèles
Il y a beaucoup d'étapes décrites comme cela mais on peut considérer un estimé à 5j/h soit 4k€ incluant la documentation, la mise en prod et la passe de configuration
Limite de cette méthode: Il faut penser la répartition des champs entre les modes de partage a priori, sinon à chaque changement c'est une petite évolution incluant un cout de migration de données ~0.5J/h
Une autre solution serait d'implémenter un sérialiseur custom qui gère le check de ces permissions objet par objet et ajoute les champs dans l'API en fonction, les premières étapes seraient les mêmes:
- Exploiter le mode "classique" client grant credential d'OIDC
- En prévoyant pour chaque partenaire la création d'un compte utilisateur
- En associant à ce compte utilisateur un clientID et clientSecret OIDC
- Prévoir la création de "groupes" via le back-office de Django type:
- Partners_light
- Partners
- Full_access
- Associer les utilisateurs de chaque partenaire à ces groupes
Mais la suite nécessiterait une passe d'implémentation spécifique. Dans ce cas là on pourrait imaginer un modèle de settings specifique qui soit paramétrable et qui injecterait la liste des champs à la volée dans le sérialiseur, ce qui permettrait à l'équipe des super-admins d'ajouter ou non des champs de l'objet dans la sérialisation, pour aboutir à un truc du genre:
- Créer des instances de settings via l'admin
- Les associer aux bons groupes crées avant
- Leur créer en value, la liste des noms des champs qu'on souhaite sérialiser
Quelque chose du genre. Compter 8j/h pour cela, 6.4k€
Ping @Berengere