Bonjour

Dans une application monolithique on a tout sous la main on peut donc jouer comme on veut.

Mais dans une architecture micro service il en va autrement.

Je trouve beaucoup d'information sur la restriction d'accès aux ressources en fonction de leur nature et de l'action qu'on veut leur appliquer.
J'utilise keycloak et dans le langage de keycloak on par le de ressource et de scope.

Ainsi je peux définir de policies sur la ressource Book et différencier les scopes Book:view, Book:manage etc.

Mais il n'est jamais question des données. Ma librairie est immense et un utilisateur peut très bien avoir les droits Book:view sur toute la librairie, mais Book:manage que sur le département de SF.
Et pour ça je ne trouve rien.

Dans une appli monolithique j'aurais créé des domaines SF, Romance, Enfant, de ressource Book, fournisseurs, clients, etc. et des scopes book:view Book:manage, etc. enfin j'aurais définis de groups qui on des droits associés à des domaines
etc. manager SF, manager enfant, etc.
Et si de nouveaux domaines apparaissent il suffit de les ajouter de modifier les affectations des groupes ou en créés de nouveau sans toucher au code.

On voit bien là que les domaines ont une adhérence au modèle métier.
Le mode de fonctionnement est que je rentre dans la méthode si j'en ai les droits RBAC, et dans la méthode je récupère le domaine pour lesquels j'ai ce droit et je peux restreindre le périmètre de donnée de mon utilisateur au seul domaine auquel il a droit.

Ça devient vite compliqué lorsqu'on passe à une architecture micro service.
l'autorisation est externalisée dans keycloak et je n'ai pas trouvé comment définir cette notion de domaine (j'ai essayé avec des attributs)
Et je n'ai rien trouvé qui traite de ce sujet.

Comment faites vous dans une architecture micro service pour savoir à quelle donnée appliquer le droit ?
Tous les exemples et toutes les doc que j'ai lus sur le sujet ne proposent comme solution que d'avoir un rôle sur toutes les données.

C'est pourtant un problème courant. un conseiller financier ne peut géré que ses clients, un magasinier que les produits de ses magasins
un pharmacien d'hôpital que les médicaments de sa pharmacie, un médecin que ses patients, etc.


Un utilisateur est membre d'un ou plusieurs groupes

un groupe à une liste de droits sur des domaines

un droit est une liste de rôle (RBAC) sur des ressources

Du coup si dans mon token je peux associer un rôle sur ressource à une liste de domaines le tour est joué.
car je n'entre dans la méthode que si j'ai LE rôle sur la ressource qui me le permet
je récupère alors la liste des domaines pour ce rôle sur cette ressource
Et je sais alors quelles données sont accessibles.

Je fais peut-être fausse route et le modèle est tout autre. Mais je ne trouve rien pour m'orienter.