create role postgrest nosuperuser nocreatedb nocreaterole noinherit noreplication nobypassrls
  login password '9012';

-- postgrest est le rôle utilisé par l'application pour se connecter à la base.
-- Il doit être configuré pour avoir un accès très limité.
-- Il s'agit d'un caméléon dont la tâche est de « devenir » un autre utilisateur pour servir des requêtes HTTP authentifiées.

-- Roles sans login. Il faut se connecter d'abord avec l'utilisateur postgrest.
-- Puis celui-ci usurpe une des identités suivantes suivant le role présent dans le JWT.
-- Lorsqu'une demande contient un JWT valide avec une revendication de rôle,
-- PostgREST passera au rôle de base de données avec ce nom pendant la durée de la demande HTTP avec la commande :
-- SET LOCAL ROLE adherent;
create role anonyme nologin;
create role adherent nologin;

-- L'utilisateur postgrest peut se connecter en tant que ...
grant anonyme to postgrest;
grant adherent to postgrest;

grant usage
  on schema public
  to anonyme;

-- Pour toutes les tables du schéma public
grant select
  on all tables
  in schema public
  to anonyme;

-- Privilège par défaut pour que chaque nouvelle table créée dans public
-- donnera automatiquement le droit SELECT à anonyme.
alter default privileges
  in schema public
  grant select
    on tables
    to anonyme;
