Rôles et permissions
DocPlatform utilise un contrôle d’accès basé sur les rôles (RBAC) alimenté par un RBAC personnalisé, un moteur d’autorisation in-process. Les permissions sont évaluées en moins de 0,1 ms par vérification, sans aucun service externe.
Hiérarchie des rôles
DocPlatform définit 5 rôles publics dans une hiérarchie stricte. Les rôles supérieurs héritent de toutes les permissions des rôles inférieurs.
Super Admin ← Propriétaire de l'org / créateur du compte (rôle public le plus élevé)
│
Admin ← Gérer les paramètres de l'espace de travail, membres, git, thème
│
Editor ← Créer et modifier des pages (configurable par workspace)
│
Commenter ← Consulter les pages, laisser des commentaires
│
Viewer ← Consulter les pages uniquement
Platform Owner est un rôle interne réservé aux opérateurs auto-hébergés pour la maintenance de la plateforme (migrations de base de données, gestion des licences, configuration système). Il n’apparaît pas dans l’interface ou l’API et ne fait pas partie de la hiérarchie publique des rôles.
Matrice des permissions
| Permission | Viewer | Commenter | Editor | Admin | Super Admin |
|---|---|---|---|---|---|
| Consulter les pages | Oui | Oui | Oui | Oui | Oui |
| Rechercher du contenu | Oui | Oui | Oui | Oui | Oui |
| Laisser des commentaires | Oui | Oui | Oui | Oui | |
| Modifier des pages | Oui | Oui | Oui | ||
| Créer des pages | Configurable | Oui | Oui | ||
| Supprimer des pages | Configurable | Oui | Oui | ||
| Télécharger des assets | Oui | Oui | Oui | ||
| Assigner des membres de l’org au workspace | Oui | Oui | |||
| Retirer des membres du workspace | Oui | Oui | |||
| Modifier les rôles des membres (dans le workspace) | Oui | Oui | |||
| Gérer les paramètres de l’espace de travail | Oui | Oui | |||
| Gérer le thème et la navigation | Oui | Oui | |||
| Inviter des utilisateurs externes dans l’org | Oui | ||||
| Créer/supprimer des espaces de travail | Oui | ||||
| Configurer le dépôt git distant | Oui | ||||
| Gérer la facturation et l’abonnement | Oui | ||||
| Accéder à tous les espaces de travail | Oui | ||||
| Gérer les paramètres au niveau de l’org | Oui |
Permissions configurables de l’éditeur
Les capacités de l’éditeur peuvent être ajustées par workspace. Les administrateurs et super administrateurs configurent ces options dans les paramètres du workspace :
| Paramètre | Par défaut | Description |
|---|---|---|
editor_can_create_pages |
true |
Les éditeurs peuvent créer de nouvelles pages |
editor_can_delete_pages |
false |
Les éditeurs peuvent supprimer des pages |
Lorsqu’une permission est désactivée, les éditeurs voient l’action grisée dans l’interface et reçoivent 403 Forbidden de l’API.
Attribuer des rôles
Premier utilisateur (Super Admin)
Le premier utilisateur à s’inscrire sur une nouvelle instance DocPlatform reçoit automatiquement le rôle Super Admin. Cela ne se produit qu’une seule fois — les inscriptions suivantes ne reçoivent aucun rôle d’espace de travail tant qu’ils ne sont pas invités.
Le Super Admin est le propriétaire de l’org et le créateur du compte. Il a le contrôle total sur tous les espaces de travail, la facturation, les connexions git et les invitations d’utilisateurs externes.
Inviter des utilisateurs externes
Seul le Super Admin peut inviter des utilisateurs externes dans l’organisation :
Interface web : Paramètres de l’org → Membres → Inviter un utilisateur externe
API :
curl -X POST http://localhost:3000/api/v1/org/invitations \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{
"email": "[email protected]",
"default_role": "editor"
}'
L’utilisateur invité rejoint l’org et peut ensuite être assigné à des espaces de travail par n’importe quel Admin ou Super Admin.
Assigner des membres aux espaces de travail
Les Admins assignent les membres existants de l’org à leur espace de travail. Les Admins ne peuvent pas inviter d’utilisateurs externes — seul le Super Admin peut le faire.
Interface web : Workspace Settings → Members → Ajouter un membre → sélectionner parmi les membres de l’org → sélectionner le rôle
API :
curl -X POST http://localhost:3000/api/v1/workspaces/:id/members \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{
"user_id": "01HY5K3M7Q8P",
"role": "editor"
}'
Rôle par défaut
Définissez le rôle par défaut pour les nouveaux membres qui acceptent une invitation sans rôle spécifique attribué :
# .docplatform/config.yaml
permissions:
default_role: viewer
Valeurs disponibles : viewer, commenter, editor, admin
Contrôle d’accès au niveau de la page
Supplantez les permissions au niveau de l’espace de travail sur des pages individuelles en utilisant le frontmatter. Les règles d’accès du frontmatter restreignent dans le cadre du rôle d’un utilisateur — elles n’accordent jamais de permissions au-delà du rôle.
Syntaxe du contrôle d’accès
Utilisez des règles d’accès basées sur les rôles et les utilisateurs pour contrôler qui peut accéder à une page :
---
title: Internal Security Policy
access:
roles: ["security-team", "engineering-leads"]
users: ["@01HY5K3M7Q8P"]
---
| Champ | Type de valeur | Description |
|---|---|---|
access.roles |
liste de noms de rôles | Rôles pouvant accéder à cette page |
access.users |
liste de @user_id |
Utilisateurs individuels pouvant accéder à cette page |
Règles :
- Préfixez les identifiants utilisateur avec
@pour cibler des utilisateurs individuels - Le Super Admin et l’Admin ont toujours accès indépendamment des règles du frontmatter
- Le frontmatter ne peut que restreindre — une page ne peut pas accorder un accès au-delà du rôle de l’utilisateur dans l’espace de travail
Exemples
Page publique (par défaut — tous les membres de l’espace de travail peuvent consulter) :
---
title: Getting Started
---
Restreinte à des équipes spécifiques :
---
title: Infrastructure Runbook
access:
roles: ["security-team", "sre-team"]
---
Restreinte avec accès utilisateur individuel :
---
title: Budget Proposal
access:
roles: ["finance-team"]
users: ["@01HY5K3M7Q8P"]
---
Ce que signifie l’accès restreint
Lorsqu’une page a des règles access :
- Les utilisateurs sans le rôle requis ne peuvent pas consulter la page
- La page n’apparaît pas dans les résultats de recherche pour les utilisateurs non autorisés
- L’accès direct par URL renvoie 403 Forbidden
Accès à la documentation publiée
Pour le site de documentation publiée (/p/{slug}/...), le contrôle d’accès fonctionne différemment :
- Toutes les pages publiées sont publiques par défaut — aucune connexion requise
- Pour exiger la connexion pour l’ensemble du site publié, définissez
PUBLISH_REQUIRE_AUTH=true— cela s’applique à toutes les pages de tous les espaces de travail - Le contrôle d’accès par page dans la documentation publiée (par ex. rendre une page réservée à l’espace de travail tandis que les autres sont publiques) est prévu pour une future version
Dans la v0.5, le champ
accessdu frontmatter est stocké et disponible pour une utilisation future, mais n’est pas appliqué sur les routes publiées. UtilisezPUBLISH_REQUIRE_AUTHpour la restriction d’accès au niveau du site.
Niveaux de rôles internes
Pour référence, chaque rôle correspond à un niveau numérique. Les niveaux supérieurs héritent de toutes les permissions des niveaux inférieurs :
| Rôle | Niveau | Portée | Action minimale |
|---|---|---|---|
| Viewer | 10 | Workspace | read |
| Commenter | 20 | Workspace | read, comment |
| Editor | 30 | Workspace | read, comment, edit (+ create/delete si activé) |
| Admin | 40 | Workspace | Toutes les actions du workspace |
| Super Admin | — | Org | Contourne toutes les vérifications du workspace |
Le Super Admin est un rôle au niveau de l’org — il contourne entièrement les vérifications de permissions du workspace plutôt que d’avoir un niveau numérique. Le Platform Owner est un flag booléen sur l’enregistrement utilisateur qui contourne toutes les vérifications globalement.
Les actions ont des niveaux minimaux : read nécessite le niveau 10+, comment nécessite 20+, edit nécessite 30+, write/delete nécessite 40+ (les éditeurs obtiennent edit mais pas write/delete sauf si les flags configurables sont activés), admin nécessite 40+. Le niveau du rôle d’un utilisateur est comparé au niveau minimum de l’action.
Comment les permissions sont évaluées
API Request
│
▼
Auth Middleware
(extract JWT, identify user)
│
▼
Permission Middleware
(custom RBAC check: user + role + resource + action)
│
├── Allowed → proceed to handler
│
└── Denied → 403 Forbidden
Flux d’évaluation en 5 étapes
- L’utilisateur est-il Platform Owner ? → AUTORISER (bypass global)
- L’utilisateur est-il Org Super Admin pour l’organisation de ce workspace ? → AUTORISER (bypass au niveau org)
- Rechercher le rôle workspace de l’utilisateur → si non membre, REFUSER
- Le niveau du rôle atteint-il le minimum requis pour l’action ? → comparer
role_level >= action_min_level, plus les flags de permissions éditeur - La page a-t-elle des règles d’accès dans le frontmatter ? → vérifier
access.roles/access.users, RESTREINDRE dans le rôle
Le frontmatter RESTREINT dans le cadre du rôle, il n’ACCORDE jamais au-delà. Un frontmatter malformé passe par défaut en mode strict — page restreinte aux Admins uniquement.
Performances
| Métrique | Valeur |
|---|---|
| Moteur | RBAC personnalisé (in-process, en mémoire) |
| Temps d’évaluation | < 0,1 ms par vérification |
| Cache | Versionné (auto-invalidé lors d’un changement de rôle ou de permission) |
| Stockage des politiques | SQLite (chargé en mémoire au démarrage) |
Mise en cache des permissions
Les politiques RBAC sont chargées depuis SQLite en mémoire au démarrage du serveur. Les modifications des rôles ou des déclarations d’accès dans le frontmatter déclenchent une invalidation du cache :
- Un administrateur modifie le rôle d’un utilisateur → la version du cache de permissions est incrémentée
- Un éditeur met à jour le frontmatter d’une page avec de nouvelles règles
access→ le cache est invalidé pour cette page - La prochaine vérification de permission charge la politique fraîche depuis SQLite
Le cache est versionné, pas basé sur le temps — il n’y a pas de fenêtre de permission obsolète.
Modèles courants
Documentation publique en lecture seule avec pages internes restreintes
# La plupart des pages : pas de règles d'accès (ouvertes à tous les membres du workspace)
# Pages internes : restreintes
---
title: Incident Response Playbook
access:
roles: ["sre-team", "admin"]
---
L’éditeur crée, l’admin publie
- Définissez
publishing.default_published: falsedans la configuration de l’espace de travail - Les éditeurs créent et modifient des pages (non publiées par défaut)
- Les administrateurs vérifient et basculent
published: true
Espaces de travail par équipe
Créez des espaces de travail séparés par équipe avec des listes de membres indépendantes :
- Espace de travail
eng-docs→ équipe d’ingénierie - Espace de travail
product-docs→ équipe produit - Espace de travail
internal-wiki→ tout le monde
Le Super Admin a accès à tous les espaces de travail pour une visibilité transversale.
Plans et limites de sièges
Comptage des sièges
Les rôles Super Admin, Admin et Editor comptent tous dans la limite de sièges max_editors du plan. Les rôles Commenter et Viewer sont illimités sur tous les plans et ne comptent jamais dans une limite de sièges.
Lorsque la limite de sièges est atteinte, de nouveaux membres de l’org peuvent toujours être invités — mais ils ne peuvent être assignés qu’aux rôles Commenter ou Viewer jusqu’à ce qu’un siège soit libéré.
Community Edition
La Community Edition est gratuite et auto-hébergée, sans clé de licence requise :
| Ressource | Limite |
|---|---|
| Espaces de travail | Illimité |
| Éditeurs (Super Admin + Admin + Editor) | Illimité |
| Viewers et Commenters | Illimité |
| Pages | Illimité |
Plans Cloud
| Free | Team | Business | |
|---|---|---|---|
| Espaces de travail | 1 | 3 | 10 |
| Sièges (Super Admin + Admin + Editor) | 3 | 15 | 50 |
| Viewers et Commenters | Illimité | Illimité | Illimité |
| Pages | 50 | 150 | 500 |
Besoin de plus ? Contactez les ventes pour les plans Enterprise avec des limites personnalisées, SSO et SLA.
Pour les détails complets de facturation, consultez Facturation et plans.
Dépannage
« 403 Forbidden » sur une page à laquelle je devrais avoir accès
- Vérifiez votre rôle : Profil → Workspace Membership
- Vérifiez le frontmatter de la page :
access.rolesinclut-il votre rôle ? - Demandez à un administrateur de l’espace de travail de vérifier votre attribution de rôle
- Si vous êtes un éditeur, vérifiez si l’action requiert que
editor_can_create_pagesoueditor_can_delete_pagessoit activé
Les changements de permissions ne prennent pas effet
Les changements de permissions devraient être instantanés (l’invalidation du cache est synchrone). Si ce n’est pas le cas :
- Déconnectez-vous et reconnectez-vous (rafraîchissez vos tokens JWT)
- Vérifiez les journaux du serveur pour des erreurs d’invalidation du cache
- Exécutez
docplatform doctorpour vérifier la santé du système de permissions
Le premier utilisateur n’est pas Super Admin
Cela se produit si le premier utilisateur s’inscrit alors que la base de données contient déjà des enregistrements utilisateur (par ex. d’une installation précédente). Pour corriger :
- Arrêtez le serveur
- Supprimez la base de données :
rm {DATA_DIR}/data.db - Démarrez le serveur et inscrivez-vous à nouveau
Cela réinitialise toutes les données. À utiliser uniquement sur des installations neuves.
« Limite de sièges atteinte » lors de l’invitation d’un membre
La limite max_editors du plan a été atteinte. Options :
- Rétrograder un Admin ou éditeur existant en Commenter ou Viewer pour libérer un siège
- Inviter le nouvel utilisateur en tant que Commenter ou Viewer (ceux-ci sont illimités)
- Mettre à niveau votre plan pour obtenir plus de sièges