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