Appliqué dans la base de données

Qui peut lire ou modifier une ligne dans Fóir est décidé par Postgres. Les règles sont écrites une fois, dans une seule spécification, et compilées en politiques de sécurité au niveau des lignes : la vérification se situe donc auprès des données, sous le code applicatif.

Une seule spécification, compilée

Le modèle d'accès tient dans un seul fichier de spécification. Demesne, notre compilateur open source, le transforme en politiques et en fonctions de base de données qu'elles appellent. Le SQL généré est livré exactement tel que le compilateur l'a écrit, et personne ne le modifie à la main. À l'heure où nous écrivons, il régit environ une centaine de tables.

Forcée, et vérifiée sur le schéma réel

La sécurité au niveau des lignes est forcée sur chaque table régie, et pas seulement activée, ce qui ferme la voie par laquelle le propriétaire d'une table lit au-delà d'une politique. Un test lit les deux réglages dans le catalogue de la base de données et échoue si l'un des deux est désactivé.

Un second test liste chaque table du schéma et échoue pour toute table ajoutée sans qu'une décision consignée précise comment elle est protégée.

Ce qu'une requête peut atteindre

Une requête adressée à l'API est servie sous ces politiques, avec l'espace de travail, le projet et l'organisation de l'appelant comme claims que la base lit. La politique de chaque table les compare à la ligne avant toute autre règle. Une ligne que l'appelant n'a pas le droit de voir se comporte comme si elle n'existait pas.

Là où l'application décide

La base de données ne sait pas distinguer certaines actions : publier un enregistrement est une mise à jour, du point de vue de Postgres. Ces permissions sont vérifiées à l'arrivée de la requête, à partir d'une carte générée depuis la même spécification, et les règles de ligne bornent toujours ce que l'action peut toucher.

Lire comment cela fonctionne

La documentation couvre la propriété, la visibilité, les octrois et la façon dont une requête est résolue pour chaque type de identifiant.