Skip to content

[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.ts ou 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

sanity-studio/deskStructure.ts
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 articles
S.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

sanity-studio/sanity.config.ts
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 Administrator

7.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

Terminal window
# Test de requête GROQ avec différents tokens
# Token lecture seule
curl "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.ts
    • sanity-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]
Switch to normal mode

Contents