J'aimerais mettre en place un système de contrôle d'accès piloté par base de données. J'ai lu sur ACL, les rôles, RBAC, etc., mais il semble que les régimes les plus courants ont des inconvénients majeurs. RBAC, par exemple, semble être maladroit lorsqu'il s'agit de mettre en œuvre un contrôle d'accès précis (par exemple, permettre à un certain rôle de mettre à jour uniquement des colonnes particulières d'un enregistrement particulier).Est-ce une bonne stratégie pour implémenter le contrôle d'accès?
si je structuré ma liste de contrôle d'accès comme celui-ci:
| role | table | action | columns | conditions |
| ----- | ----- | ------ | -------- | ----------------- |
| user | user | view | name, id | self.id = user.id |
| user | user | update | password | self.id = user.id |
| admin | user | update | * | |
| admin | user | create | * | |
| admin | user | delete | * | |
L'idée est que le rôle (s) d'un utilisateur sera vérifié par rapport à cette table lorsqu'ils tentent d'accéder à la base de données (donc, mis en œuvre à le niveau du modèle). action
peut être l'un des {create, view, update, delete, list}
. L'étendue self
serait un mot clé réservé faisant référence aux propriétés de l'utilisateur actuel. Cela nous permettrait par exemple de permettre uniquement aux utilisateurs de mettre à jour leurs propres mots de passe (et pas ceux de quelqu'un d'autre).
Est-ce robuste? Évidemment, j'aurais toujours besoin d'une liste séparée pour contrôler l'accès à d'autres types de ressources comme les URI, etc.
Merci de m'avoir aidé à donner un nom à ce que j'essaie de faire. Pendant un moment, je pensais utiliser Prolog pour implémenter ceci: https: //programmers.stackexchange.com/questions/266205/using-prolog-to-implement-authorization-rules-rules. Mais, il y a trop de risques de "conséquences imprévues". Connaissez-vous des implémentations PHP d'ABAC/XACML? – alexw
Non, je ne le fais pas. Je suis seulement au courant des implémentations Java et .Net –