Skip to content

Gestion des droits sur une partie d'une table

Objectif : accorder les droits à un rôle de groupe sur une partie des enregistrements d'une table (en fonction de la valeur d'un champs par exemple) dans une base de données PostgreSQL.

Tester la fonction suivante :

CREATE OR REPLACE FUNCTION mon_schema.fonction_rls()
RETURNS BOOLEAN AS $$
DECLARE
    champ_value INTEGER;
BEGIN
    -- Obtenez la valeur du champ mon_champ pour la ligne actuelle
    SELECT mon_champ INTO champ_value FROM ma_table WHERE id = current_setting('myvars.userid')::INTEGER;

    -- Vérifiez les conditions pour accorder l'accès
    IF champ_value = 42 THEN
        RETURN TRUE;
    ELSE
        RETURN FALSE;
    END IF;
END;
$$ LANGUAGE plpgsql;

Ajout de la politique de sécurité :

ALTER TABLE ma_table ENABLE ROW LEVEL SECURITY;

CREATE POLICY mon_schema.politique_rls
    FOR ALL
    USING (mon_schema.fonction_rls());
Edited by ronan.vignard