MTES-MCT / asgard-postgresql

ASGARD. Système de gestion des droits pour PostgreSQL.
https://snum.scenari-community.org/Asgard/Documentation/co/SiteReference.html
Other
2 stars 3 forks source link

Possibilité de recours à la fonction aclexplode ( aclitem[] ) #2

Closed MarHoff closed 2 years ago

MarHoff commented 3 years ago

En parcourant sommairement votre code j'ai noté que vous n'aviez pas recours à la fonction aclexplode(aclitem[] ) qui est documentée correctement à partir de la version de PostgreSQL 12 mais était déjà disponible au moin à partir de PG10, vérifié à l'instant.

aclexplode returns an aclitem array as a set of rows. Output columns are grantor oid, grantee oid (0 for PUBLIC), granted privilege as text (SELECT, ...) and whether the privilege is grantable as boolean. makeaclitem performs the inverse operation.

Le recours à cette fonction pourrait simplifier certaines parties de votre code qui recoure à des unnest() et à des correspondances en dur entre les code et le nom de droits à accorder.

Après je comprend tout à fait que la solution actuelle peut avoir son avantage dans le cadre des versions plus anciennes!

alhyss commented 3 years ago

C'est une bonne suggestion ! aclexplode(aclitem[]) n'apparaissait pas dans la documentation, mais elle était en fait même déjà présente sous PostgreSQL 9.5, soit la plus vieille version supportée par l'extension.

Il est clair que ça simplifierait le code de certaines fonctions et ça éviterait d'avoir à recourir à asgard_role_trans_acl(regrole) (cf. documentation) pour palier au fait que la syntaxe des identifiants dans les objets aclitem n'est pas tout à fait la syntaxe normale des identifiants de PostgreSQL... Le résultat devrait être beaucoup plus propre.

Donc oui, ce sera fait !

MarHoff commented 3 years ago

Ah oui en effet intéressant le souci rencontré avec asgard_role_trans_acl(regrole) Et du coup récupérer des oid::regrole serait plus confortable, content que ma remarque vous soit utile!

alhyss commented 3 years ago

Absolument, avoir directement les OID est nettement plus simple. Merci !