Posture de sécurité
Définition
Toutes les tables publiques ont la RLS activée avec des politiques scopées à auth.uid() et des helpers (can_manage_ride, has_role, is_super_admin). Les champs sensibles (téléphone d'activité, code de réservation, infos internes d'hôtel) sont exclus des vues sûres côté motard (hotels_safe, activities_safe, day_restaurants_safe). Le bucket ride-photos est privé et son accès est régi par politique.
Quand l'utiliser
À chaque ajout de table, colonne, bucket, ou changement de politique.
Étapes
- Lancez le scan de sécurité (panneau Sécurité → Scanner).
- Examinez les résultats ; corrigez ou ignorez via le panneau du scanner.
- Pour une nouvelle table : activez la RLS dans la MÊME migration, GRANT aux bons rôles, ajoutez des politiques scopées utilisateur.
- Pour une nouvelle colonne sensible : étendez la
*_safecorrespondante pour l'exclure, et routez les requêtes motard via la vue sûre.
Capture d'écran
Capture à venir dans la prochaine passe.
Astuces
- Mettez à jour le mémo sécurité en ignorant des findings, pour qu'ils ne ré-apparaissent pas.
- Ne stockez jamais les rôles sur la table profil — toujours dans
user_roles. - Lancez le scan de sécurité intégré après tout changement de schéma ; il signale RLS manquante, GRANT manquant, politiques trop permissives.
- À chaque nouvelle table en migration, incluez GRANTs et RLS dans la même migration — une migration partielle laisse une faille.
Dépannage
- « permission denied for table » : GRANT manquants sur la nouvelle table — voir la règle public-schema-grants de Lovable.
- « Permission refusée » sur une requête légitime : un GRANT manque pour le rôle de l'utilisateur. Le hint Postgres nomme généralement le GRANT à exécuter.