[Nom de la Configuration Studio]
[Nom de la Configuration Studio]
Documentation technique
Type de ressource : Configuration Sanity Studio (Rôles / Permissions / Plugins)
Fichier source :sanity-studio/sanity.config.tsou configuration associée
Statut : [Actif / Déprécié / En développement]
1. Vue d’ensemble
1.1. Description
[Description concise de cette configuration Studio et son rôle dans le workflow éditorial]
1.2. Objectif
- [Objectif principal : ex. définir les rôles et permissions pour les contributeurs]
- [Bénéfice pour l’équipe éditoriale]
1.3. Périmètre concerné
- Environnements : [Development / Staging / Production]
- Utilisateurs concernés : [Liste des rôles : Administrator, Editor, Contributor, Viewer]
- Types de documents impactés : [Liste : post, project, page, author, category, etc.]
2. Architecture et flux
2.1. Diagramme de flux (si applicable)
[Utilisateur Sanity] │ (authentification OAuth) ▼[Sanity Studio] │ • Vérification du rôle │ • Application des permissions │ • Affichage de l'interface adaptée ▼[Actions autorisées / restreintes]2.2. Composants impliqués
| Composant | Rôle | Couche |
|---|---|---|
| Sanity Studio | Interface d’édition | L1 (CMS) |
| Configuration des rôles | Définition des permissions | L1 (Configuration) |
| OAuth Provider | Authentification des utilisateurs | Infrastructure |
3. Configuration
3.1. Variables d’environnement requises
| Variable | Description | Obligatoire | Valeur par défaut |
|---|---|---|---|
SANITY_PROJECT_ID |
ID du projet Sanity | ✅ | - |
SANITY_DATASET |
Nom du dataset (ex: production) |
✅ | - |
SANITY_AUTH_PROVIDERS |
Providers OAuth activés | ❌ | google,github |
3.2. Configuration des rôles et permissions
3.2.1. Matrice des rôles
| Rôle | Droits principaux | Public cible | Accès Studio |
|---|---|---|---|
| Administrator | Accès total (schémas, settings, tous les documents, gestion des utilisateurs) | Équipe Architecture / Tech Lead | ✅ Complet |
| Editor | Création, modification et publication de tous les contenus (posts, projects, pages, authors, categories) | Équipe Marketing / Contenu | ✅ Complet |
| Contributor | Création et modification de contenus, sans droit de publication (reste en draft) | Rédacteurs externes ou juniors | ✅ Complet |
| Viewer | Lecture seule | Stakeholders / relecture | ✅ Lecture seule |
3.2.2. Matrice des permissions par type de document
| Type de document | Administrator | Editor | Contributor | Viewer |
|---|---|---|---|---|
post (Article blog) |
✅ CRUD + Publish | ✅ CRUD + Publish | ✅ Create + Update | ✅ Read |
project (Portfolio) |
✅ CRUD + Publish | ✅ CRUD + Publish | ✅ Create + Update | ✅ Read |
page (Vitrine) |
✅ CRUD + Publish | ✅ CRUD + Publish | ✅ Create + Update | ✅ Read |
author |
✅ CRUD | ✅ CRUD | ❌ | ✅ Read |
category |
✅ CRUD | ✅ CRUD | ❌ | ✅ Read |
schema (Définition) |
✅ CRUD | ❌ | ❌ | ❌ |
webhook (Configuration) |
✅ CRUD | ❌ | ❌ | ❌ |
3.2.3. Permissions granulaires (si applicable)
// sanity-studio/sanity.config.ts (extrait)export default defineConfig({ // ... configuration de base document: { actions: (prev, { draft, published, schemaType }) => { // Exemple : restreindre la publication aux Editors et Administrators if (schemaType === 'post') { return prev.filter((action) => { if (action.label === 'Publish') { return currentUser.roles.some(role => ['administrator', 'editor'].includes(role.name) ); } return true; }); } return prev; }, },});3.3. Configuration de l’authentification
3.3.1. Providers OAuth activés
| Provider | Configuration | Obligatoire |
|---|---|---|
| Google OAuth | Client ID + Secret via Sanity Dashboard | ✅ |
| GitHub OAuth | Client ID + Secret via Sanity Dashboard | ❌ |
| Email/Password | Désactivé (recommandé) | ❌ |
3.3.2. Règles d’accès
- ✅ Authentification obligatoire pour tous les utilisateurs
- ✅ Seuls les emails de domaine autorisé peuvent accéder au Studio (si applicable)
- ✅ Invitation des utilisateurs via Sanity Dashboard (Administrator uniquement)
- ✅ Révocation d’accès immédiate possible depuis le Dashboard
4. Structure du Desk (si applicable)
4.1. Organisation des documents1/2
4.1. Organisation des documents2/2
import { StructureBuilder } from 'sanity/structure';
export const deskStructure = (S: StructureBuilder) => S.list() .title('Contenu') .items([ // Section Blog S.listItem() .title('Blog') .child( S.documentTypeList('post') .title('Articles') .filter('_type == "post"') ),
// Section Portfolio S.listItem() .title('Portfolio') .child( S.documentTypeList('project') .title('Projets') .filter('_type == "project"') ),
// Section Pages Vitrine S.listItem() .title('Pages Vitrine') .child( S.documentTypeList('page') .title('Pages') .filter('_type == "page"') ),
// Section Utilisateurs S.listItem() .title('Auteurs') .child(S.documentTypeList('author').title('Auteurs')),
S.listItem() .title('Catégories') .child(S.documentTypeList('category').title('Catégories')),
// Séparateur S.divider(),
// Documents système ...S.documentTypeListItems().filter( listItem => !['post', 'project', 'page', 'author', 'category'].includes(listItem.getId()!) ), ]);4.2. Vues personnalisées (si applicable)
// Exemple de vue personnalisée pour les articlesS.documentTypeListItem('post').child( S.document() .schemaType('post') .documentId('post-123') .views([ S.view.form(), S.view .component(PreviewComponent) .title('Preview'), ]))5. Plugins et extensions (si applicable)
5.1. Plugins installés
| Plugin | Rôle | Version | Obligatoire |
|---|---|---|---|
@sanity/vision |
Éditeur GROQ pour tester les requêtes | Latest | ❌ |
@sanity/asset-utils |
Gestion des médias | Latest | ✅ |
| [Autre plugin] | [Rôle] | [Version] | [✅/❌] |
5.2. Configuration des plugins
import { visionTool } from '@sanity/vision';
export default defineConfig({ // ... configuration de base plugins: [ visionTool(), // Autres plugins ],});6. Sécurité
6.1. Mécanismes de sécurité
| Mécanisme | Implémentation | Rationale |
|---|---|---|
| Authentification OAuth | Google / GitHub | Évite les mots de passe faibles |
| Rôles granulaires | Matrice de permissions | Contrôle d’accès précis |
| Restrictions de publication | Filtres sur les actions | Empêche les publications non autorisées |
| Audit logs | Sanity Dashboard | Traçabilité des modifications |
6.2. Règles de sécurité
- ✅ Les Administrators sont les seuls à pouvoir modifier les schémas et configurer les webhooks
- ✅ Les Contributors ne peuvent pas publier (restent en draft)
- ✅ Les Viewers ont un accès en lecture seule
- ✅ Les tokens d’API sont générés avec les permissions minimales nécessaires
- ✅ Les utilisateurs inactifs sont révoqués régulièrement (tous les 90 jours recommandé)
6.3. Gestion des tokens API
| Token | Permissions | Généré par | Stockage |
|---|---|---|---|
SANITY_API_READ_TOKEN |
Lecture des drafts | Administrator | Cloudflare Secrets |
SANITY_API_WRITE_TOKEN |
Écriture (mutations) | Administrator | Cloudflare Secrets |
SANITY_ADMIN_TOKEN |
Accès total (backups, exports) | Administrator | Cloudflare Secrets |
7. Workflow éditorial
7.1. Cycle de vie d’un document
[Création] → [Draft] → [Relecture] → [Publication] → [Archivé] │ │ │ │ │ ▼ ▼ ▼ ▼ ▼ Contributor Contributor Editor/Viewer Public Administrator7.2. Bonnes pratiques éditoriales
- ✅ Toujours remplir les champs SEO (metaTitle, metaDescription, ogImage)
- ✅ Utiliser le mode Preview avant publication
- ✅ Vérifier le rendu responsive (mobile, tablet, desktop)
- ✅ Publier les modifications par lots plutôt qu’une par une
- ✅ Archiver les contenus obsolètes plutôt que les supprimer
7.3. Processus de validation
| Étape | Responsable | Action |
|---|---|---|
| 1. Rédaction | Contributor | Création du contenu en draft |
| 2. Relecture | Editor / Viewer | Validation du contenu |
| 3. Publication | Editor / Administrator | Publication finale |
| 4. Vérification | Editor | Vérification post-publication (preview + live) |
8. Débogage et troubleshooting
8.1. Problèmes courants
| Symptôme | Cause probable | Solution |
|---|---|---|
| “Permission denied” | Rôle insuffisant | Vérifier les permissions dans Sanity Dashboard |
| Impossible de publier | Utilisateur Contributor | Demander à un Editor de publier |
| Schéma non visible | Cache Studio | Vider le cache du navigateur |
| Plugin ne fonctionne pas | Version incompatible | Vérifier la compatibilité des plugins |
| Authentification échoue | OAuth mal configuré | Vérifier les Client ID/Secret dans Sanity Dashboard |
8.2. Logs et monitoring
Côté Sanity :
- Sanity Dashboard → Settings → Activity → Audit logs
- Vérifier les actions des utilisateurs (création, modification, publication)
Côté application :
- Logs des webhooks (voir
/sanity/webhooks/) - Logs des erreurs de build (CI/CD)
8.3. Tests manuels
# Test de requête GROQ avec différents tokens# Token lecture seulecurl "https://[project-id].api.sanity.io/v2025-01-01/data/query/production?query=*[_type=='post'][0]" \ -H "Authorization: Bearer [read-token]"
# Token écriture (si disponible)curl -X POST "https://[project-id].api.sanity.io/v2025-01-01/data/mutate/production" \ -H "Authorization: Bearer [write-token]" \ -H "Content-Type: application/json" \ -d '{"mutations": [{"create": {"_type": "post", "title": "Test"}}]}'9. Bonnes pratiques
9.1. Pour les Administrators
- ✅ Configurer les rôles et permissions avant d’inviter des utilisateurs
- ✅ Documenter les changements de configuration dans ce fichier
- ✅ Révoquer les accès des utilisateurs partis
- ✅ Rotation régulière des tokens API (tous les 90 jours)
- ✅ Tester les permissions en se connectant avec différents rôles
9.2. Pour les Editors
- ✅ Valider les contenus avant publication
- ✅ Utiliser le mode Preview systématiquement
- ✅ Vérifier le SEO (metaTitle, metaDescription, ogImage)
- ✅ Archiver les contenus obsolètes
9.3. Pour les Contributors
- ✅ Créer des drafts complets (tous les champs obligatoires remplis)
- ✅ Ne pas publier (demander à un Editor)
- ✅ Utiliser le mode Preview pour vérifier le rendu
- ✅ Signaler les problèmes techniques aux Administrators
9.4. Considérations de performance
- ⚠️ Le Studio peut être lent avec beaucoup de documents (> 10 000)
- ⚠️ Les images lourdes peuvent ralentir l’édition
- ✅ Utiliser des filtres dans le Desk pour naviguer plus rapidement
- ✅ Optimiser les images avant upload (max 2 MB recommandé)
10. Évolutions et roadmap
10.1. Améliorations planifiées
- [Évolution 1 : ex. Ajout d’un plugin de traduction]
- [Évolution 2 : ex. Intégration d’un workflow de validation multi-niveaux]
- [Évolution 3 : ex. Personnalisation avancée du Desk]
10.2. Limitations connues
- ❌ Le Studio ne supporte pas nativement le versioning avancé (historique limité)
- ❌ Les permissions granulaires nécessitent du code custom (actions filtrées)
- ❌ Le mode offline n’est pas supporté
11. Ressources liées
- Documentation Sanity : Roles & Permissions
- Documentation Sanity : Studio Configuration
- DAT L1 : §4.9.1 - Rôles et permissions dans Sanity Studio
- DAT L1 : §4.9.3 - Alerting Webhook & Opérations
- Fichiers concernés :
sanity-studio/sanity.config.tssanity-studio/deskStructure.ts(si applicable)- Configuration Sanity Dashboard → Settings → Members
12. Historique des modifications
| Date | Version | Description | Auteur |
|---|---|---|---|
| YYYY-MM-DD | 1.0 | Création initiale | [Nom] |
| YYYY-MM-DD | 1.1 | [Modification] | [Nom] |