Reference complete du systeme de Listes de Controle d'Acces (ACL) de Mayan EDMS.
Document a l'usage des administrateurs.
Mayan utilise un modele a trois niveaux pour controler qui peut faire quoi :
Niveau 1 : Permissions globales (Role)
↓
Niveau 2 : Permissions par type de document
↓
Niveau 3 : ACL par objet (document, cabinet, workflow...)
Attribuees a un Role, qui est ensuite assigne a un ou plusieurs Groupes (eux-memes contenant des Utilisateurs).
Si un role possede la permission documents.document_view globalement, tous les utilisateurs de ce role voient tous les documents, sans exception. Les ACLs par objet ne sont jamais consultees.
Quand l'utiliser :
Le DocumentType est lui-meme un objet qui peut recevoir des ACLs. Puisque les documents heritent des ACLs de leur type :
DocumentType "Factures" → ACL : RH peut voir
└── Document facture_001.pdf → herite : RH peut voir
└── Document facture_002.pdf → herite : RH peut voir
Avantage : une seule ACL sur le type protege tous les documents de ce type.
Quand l'utiliser :
Un ACL pose directement sur un document, cabinet, workflow, source, etc.
Document "Rapport confidentiel Q4.pdf" → ACL : Seulement le groupe "Direction"
Quand l'utiliser :
Quand un utilisateur tente une action sur un objet, le systeme evalue dans l'ordre :
Si aucune de ces conditions n'est remplie → Acces refuse.
Le systeme Mayan ne connait que deux operations :
| Operation | Effet |
|---|---|
grant(permission, role, objet) |
Ajoute la permission au role pour cet objet |
revoke(permission, role, objet) |
Retire la permission. Si plus aucune permission, l'ACL est supprime |
Il n'y a pas de "refus explicite" (DENY). On ne peut qu'accorder ou retirer. Un acces qui n'est pas explicitement accorde est refuse.
L'heritage permet de definir une politique au niveau superieur et de la voir propager automatiquement.
DocumentType
└── Document (herite via document_type)
├── DocumentFile (herite via document)
├── DocumentVersion (herite via document)
├── DocumentComment (herite via document)
├── DocumentCheckout (herite via document)
└── DocumentQAEntry (herite via document)
Consequence pratique : une ACL posee sur un DocumentType protege automatiquement les documents de ce type ET leurs fichiers, versions, commentaires, checkouts, etc.
Workflows :
Workflow
└── WorkflowInstance (herite via workflow)
└── WorkflowInstanceLogEntry (herite via workflow_instance__workflow)
Metadonnees :
MetadataType
└── DocumentMetadata (herite via metadata_type)
Index :
IndexTemplate
└── IndexTemplateNode (herite via index)
└── IndexInstanceNode (herite via index_template_node__index)
Cabinets (cas special) : Les cabinets utilisent une arborescence MPTT. Un ACL sur un cabinet racine (niveau 0) s'applique a tous ses sous-cabinets. Il n'est pas necessaire de mettre un ACL sur chaque niveau.
L'interface distingue :
Lister les ACLs d'un objet :
GET /api/v5/objects/{app_label}/{model_name}/{object_id}/acls/
Creer une ACL :
POST /api/v5/objects/{app_label}/{model_name}/{object_id}/acls/
Body: {"role_id": 3}
Ajouter une permission a une ACL :
POST /api/v5/objects/{app_label}/{model_name}/{object_id}/acls/{acl_id}/permissions/add/
Body: {"permission": "documents.document_view"}
Retirer une permission d'une ACL :
POST /api/v5/objects/{app_label}/{model_name}/{object_id}/acls/{acl_id}/permissions/remove/
Body: {"permission": "documents.document_view"}
Supprimer une ACL :
DELETE /api/v5/objects/{app_label}/{model_name}/{object_id}/acls/{acl_id}/
Les workflows peuvent automatiquement accorder ou revoquer des droits :
| Action | Effet |
|---|---|
GrantDocumentAccessAction |
Accorde une permission a un role sur le document du workflow |
RevokeDocumentAccessAction |
Retire une permission d'un role sur le document du workflow |
Utile pour : "quand le contrat passe a l'etat Signe → le groupe Auditeurs recoit l'acces en lecture".
documents)| Permission | Cle | Description |
|---|---|---|
| Voir les documents | documents.document_view |
Lecture seule des documents |
| Editer les documents | documents.document_edit |
Modifier les proprietes |
| Creer des documents | documents.document_create |
Uploader dans un type de document |
| Changer le type | documents.document_change_type |
Deplacer vers un autre type |
| Ajouter un fichier | documents.document_file_new |
Nouvelle version de fichier |
| Nouvelle version | documents.document_version_create |
Creer une version |
| Outils | documents.document_tools |
Acces aux outils avances |
| Corbeille | documents.document_trash |
Mettre a la corbeille |
| Restaurer | documents.trashed_document_restore |
Restaurer de la corbeille |
| Supprimer definitivement | documents.trashed_document_delete |
Destruction finale |
| Gerer le type de document | documents.document_type_edit |
Modifier la configuration du type |
| Supprimer le type | documents.document_type_delete |
Supprimer un type de document |
| Voir le type | documents.document_type_view |
Voir la configuration du type |
cabinets)| Permission | Cle | Description |
|---|---|---|
| Voir les cabinets | cabinets.cabinet_view |
Voir le contenu |
| Creer un cabinet | cabinets.cabinet_create |
Nouveau cabinet |
| Editer un cabinet | cabinets.cabinet_edit |
Renommer, deplacer |
| Supprimer un cabinet | cabinets.cabinet_delete |
Supprimer (sans le contenu) |
| Ajouter un document | cabinets.cabinet_add_document |
Mettre un document dans le cabinet |
| Retirer un document | cabinets.cabinet_remove_document |
Enlever un document |
document_states)| Permission | Cle | Description |
|---|---|---|
| Voir le workflow | document_states.workflow_template_view |
Consultation |
| Editer le workflow | document_states.workflow_template_edit |
Modifier la structure |
| Supprimer le workflow | document_states.workflow_template_delete |
Suppression |
| Executer une transition | document_states.workflow_instance_transition |
Faire avancer le workflow |
| Supprimer une instance | document_states.workflow_instance_delete |
Reinitialiser le workflow |
| Outils | document_states.workflow_tools |
Actions avancees |
metadata)| Permission | Cle | Description |
|---|---|---|
| Voir les metadonnees | metadata.document_metadata_view |
Lecture |
| Ajouter une metadonnee | metadata.document_metadata_add |
Ajout sur un document |
| Modifier une metadonnee | metadata.document_metadata_edit |
Changement |
| Supprimer une metadonnee | metadata.document_metadata_remove |
Retrait |
| Gerer les types | metadata.metadata_type_edit |
Configurer les champs |
| Supprimer un type | metadata.metadata_type_delete |
Destruction |
| Voir les types | metadata.metadata_type_view |
Consultation |
sources)| Permission | Cle | Description |
|---|---|---|
| Voir les sources | sources.sources_view |
Liste des sources |
| Editer une source | sources.sources_edit |
Configuration |
| Supprimer une source | sources.sources_delete |
Destruction |
| Namespace | Permissions notables |
|---|---|
tags |
tag_view, tag_edit, tag_delete, tag_attach, tag_remove |
ocr |
document_version_ocr, document_version_ocr_content_view |
document_comments |
document_comment_create, document_comment_delete, document_comment_view |
document_signatures |
document_file_sign_detached, document_file_signature_view, document_file_signature_upload |
document_parsing |
document_file_parse, document_file_content_view |
linking |
smart_link_view, smart_link_edit, smart_link_delete |
web_links |
web_link_view, web_link_edit, web_link_instance_view |
checkouts |
document_check_out, document_check_in, document_check_in_override |
mailer |
mailing_profile_view, mailing_profile_use |
permissions |
role_view, role_edit, role_delete |
user_management |
user_view, user_edit, group_view, group_edit |
file_metadata |
file_metadata_view, file_metadata_submit |
document_qa |
document_qa_ask, document_qa_view, document_qa_delete |
redactions |
redaction_create, redaction_delete, redaction_view |
quotas |
quota_view, quota_edit |
Contexte : Tous les documents de type "RH" doivent etre visibles par le groupe RH, et personne d'autre.
Solution : Une ACL sur le DocumentType "RH"
Lecteur RH avec la permission documents.document_viewrhLecteur RH → Permissions → Ajouter documents.document_viewTous les documents de type RH heritent automatiquement. Aucune action necessaire par document.
Contexte : Le cabinet "Direction" ne doit etre accessible qu'au groupe direction.
Solution : Une ACL sur le cabinet racine
Acces Directioncabinets.cabinet_view et documents.document_viewdirectionLecteur Directioncabinets.cabinet_view et documents.document_viewTous les sous-cabinets heritent (pas besoin de repeter).
Contexte : Quand un contrat passe a l'etat "Signe", le groupe "Auditeurs" doit pouvoir le voir.
Solution : Action de workflow GrantDocumentAccessAction
Auditeur Contrats avec documents.document_viewauditeursGrantDocumentAccessActionAuditeur Contrats, permission = documents.document_viewQuand un document atteint "Signe", l'ACL est automatiquement creee.
Contexte : La source email "Factures fournisseurs" ne doit etre utilisable que par le groupe Comptabilite.
Solution : ACL sur l'objet Source
Operateur Sources avec sources.sources_view et documents.document_createsources.sources_view et documents.document_createContexte : Un superviseur doit pouvoir forcer le retour d'un document emprunte par quelqu'un d'autre.
Solution : Permission globale
Superviseur Checkout avec checkouts.document_check_in_overridesuperviseursPas besoin d'ACL par objet : c'est une permission globale.
Toujours commencer par le Type de document — c'est le point d'ancrage le plus efficace. Une ACL sur le type couvre tous les documents de ce type et leurs fichiers/versions.
Utiliser les Roles pour regrouper les permissions — un role Gestionnaire RH peut contenir documents.document_view + metadata.document_metadata_edit + tags.tag_attach. Plus facile a maintenir que des permissions individuelles sur chaque ACL.
Eviter la proliferation d'ACLs par document — si vous avez 50 documents avec des ACLs individuelles identiques, creez un type ou un cabinet pour les regrouper.
Permissions globales avec parcimonie — une permission globale court-circuite toutes les ACLs. A reserver aux admins et auditeurs.
Tester avec un compte non-admin — creez un compte de test dans le groupe concerne et verifiez qu'il voit exactement ce qu'il doit voir.
Page generee le 2026-05-02 • English version