Skip to main content

Vue d’ensemble

Kit’Asso utilise les permissions Hasura pour contrôler l’accès aux données. Hasura gère les autorisations au niveau GraphQL, ce qui remplace le mécanisme Row Level Security (RLS) natif de PostgreSQL. Philosophie de sécurité :
“Le public peut lire le contenu actif, les utilisateurs authentifiés (admin) peuvent tout gérer.”
Rôles :
  • public — Visiteurs non authentifiés (lecture seule du contenu actif)
  • user / admin — Utilisateurs authentifiés via Nhost Auth (CRUD complet)

Permissions par domaine

1. Contenu toujours visible (tools, categories, filters, tool_features, site_assets)

Résultat : Les visiteurs voient tous les outils et catégories. Seuls les admins peuvent créer, modifier ou supprimer.

2. Contenu avec statut (workflows, tool_packs, quizzes)

Résultat : Les visiteurs ne voient que le contenu publié. Les admins voient et gèrent les drafts.

3. Contenu enfant (workflow_steps, quiz_questions, quiz_answers, quiz_recommendations)

Logique : La visibilité d’un step suit celle de son workflow parent. Si un workflow est en draft, ses steps ne sont pas visibles publiquement.

4. Quiz Responses (cas spécial)

Résultat : Le public peut soumettre des réponses de quiz mais ne peut pas les lire. Les admins accèdent aux données pour l’analytics.

5. Pack Tools (table de jonction)


Configuration dans Hasura

Comment configurer les permissions

  1. Ouvrez la console Hasura de votre projet Nhost
  2. Sélectionnez une table (ex: tools)
  3. Allez dans l’onglet Permissions
  4. Définissez les règles pour chaque rôle :
Exemple : table tools, rôle public :
  • SELECT : ✅ Autorisé, sans filtre (toutes les lignes)
  • INSERT/UPDATE/DELETE : ❌ Non autorisé
Exemple : table workflows, rôle public :
  • SELECT : ✅ Autorisé, avec filtre : { "status": { "_eq": "active" } }
  • INSERT/UPDATE/DELETE : ❌ Non autorisé
Exemple : table workflows, rôle admin :
  • SELECT : ✅ Autorisé, sans filtre
  • INSERT/UPDATE/DELETE : ✅ Autorisé

Patterns de permissions

Pattern 1 : Public read, Admin CRUD

Tables : tools, categories, filters, tool_features, site_assets Tous les visiteurs peuvent lire. Seuls les admins peuvent modifier.

Pattern 2 : Public read active only, Admin read all

Tables : workflows, tool_packs, quizzes Le public ne voit que le contenu avec status = 'active'. Les admins voient tout.

Pattern 3 : Public read via parent

Tables : workflow_steps, quiz_questions, quiz_answers, quiz_recommendations La visibilité dépend du statut du parent (workflow ou quiz).

Pattern 4 : Public insert only

Tables : quiz_responses Le public peut soumettre des données (réponses quiz) mais ne peut pas les consulter.

Tester les permissions

Test 1 : Visiteur non authentifié

Test 2 : Admin authentifié

Test 3 : Insertion publique bloquée


Bonnes pratiques

✅ À faire

  • Toujours tester les permissions avec un utilisateur non authentifié avant déploiement
  • Utiliser des filtres Hasura pour le contenu avec statut
  • Documenter les permissions dans la console Hasura

❌ À éviter

  • Ne jamais exposer des données sensibles au rôle public
  • Ne pas créer de permissions trop permissives (ex: public avec CRUD)
  • Ne pas oublier les tables enfants quand on restreint un parent

Ressources

Database Schema

Structure complète des 13 tables

Nhost & GraphQL

Architecture backend

API Layer

Abstractions qui respectent les permissions automatiquement

Nhost Docs

Documentation officielle