Disons que j'ai deux groupes de base de données Postgresql, "auteurs" et "éditeurs", et deux utilisateurs, "maxwell" et "ernest".
create role authors;
create role editors;
create user maxwell;
create user ernest;
grant authors to editors; --editors can do what authors can do
grant editors to maxwell; --maxwell is an editor
grant authors to ernest; --ernest is an author
Je voudrais écrire une fonction performante qui retourne une liste des rôles (de préférence leur oid) auxquels maxwell appartient, quelque chose comme ceci:
create or replace function get_all_roles() returns oid[] ...
Il devrait retourner les oids pour maxwell, les auteurs et les éditeurs (mais pas ernest).
Mais je ne sais pas comment le faire en cas d'héritage.
pg_has_role()
est probablement un peu plus rapide que ma requête récursive, même si cela n'a guère d'importance. Une dernière chose cependant: il renvoie tous les rôles pour les super-utilisateurs, ce qui peut ou non être un effet secondaire bienvenu. C'est là que le résultat diffère de ma requête.