[Nom de la Configuration Studio]
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
Section titled â1. Vue dâensembleâ1.1. Description
Section titled â1.1. Descriptionâ[Description concise de cette configuration Studio et son rĂŽle dans le workflow Ă©ditorial]
1.2. Objectif
Section titled â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é
Section titled â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
Section titled â2. Architecture et fluxâ2.1. Diagramme de flux (si applicable)
Section titled â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
Section titled â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
Section titled â3. Configurationâ3.1. Variables dâenvironnement requises
Section titled â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
Section titled â3.2. Configuration des rĂŽles et permissionsâ3.2.1. Matrice des rĂŽles
Section titled â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
Section titled â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)
Section titled â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
Section titled â3.3. Configuration de lâauthentificationâ3.3.1. Providers OAuth activĂ©s
Section titled â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
Section titled â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)
Section titled â4. Structure du Desk (si applicable)â4.1. Organisation des documents
Section titled â4.1. Organisation des documentsâ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)
Section titled â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)
Section titled â5. Plugins et extensions (si applicable)â5.1. Plugins installĂ©s
Section titled â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
Section titled â5.2. Configuration des pluginsâimport { visionTool } from '@sanity/vision';
export default defineConfig({ // ... configuration de base plugins: [ visionTool(), // Autres plugins ],});6. Sécurité
Section titled â6. SĂ©curitĂ©â6.1. MĂ©canismes de sĂ©curitĂ©
Section titled â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é
Section titled â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
Section titled â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
Section titled â7. Workflow Ă©ditorialâ7.1. Cycle de vie dâun document
Section titled â7.1. Cycle de vie dâun documentâ[CrĂ©ation] â [Draft] â [Relecture] â [Publication] â [ArchivĂ©] â â â â â ⌠⌠⌠⌠⌠Contributor Contributor Editor/Viewer Public Administrator7.2. Bonnes pratiques Ă©ditoriales
Section titled â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
Section titled â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
Section titled â8. DĂ©bogage et troubleshootingâ8.1. ProblĂšmes courants
Section titled â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
Section titled â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
Section titled â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
Section titled â9. Bonnes pratiquesâ9.1. Pour les Administrators
Section titled â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
Section titled â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
Section titled â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
Section titled â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
Section titled â10. Ăvolutions et roadmapâ10.1. AmĂ©liorations planifiĂ©es
Section titled â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
Section titled â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
Section titled â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
Section titled â12. Historique des modificationsâ| Date | Version | Description | Auteur |
|---|---|---|---|
| YYYY-MM-DD | 1.0 | Création initiale | [Nom] |
| YYYY-MM-DD | 1.1 | [Modification] | [Nom] |