Frappe Framework
Types de permissions
Les types de permissions personnalisés ajoutent des droits au-delà de read, write, create, delete et submit. Cette page montre comment en créer un, le vérifier dans le code et l’attribuer aux rôles.
À quoi servent les types de permissions personnalisés
À retenir
Cette fonctionnalité est disponible à partir de la v16.
Les types de permissions personnalisés (Custom Permission Types) permettent de créer des drapeaux de permission au-delà de ceux intégrés (read, write, create, delete, submit). Utilisez-les pour des permissions liées à une action précise : « approuver un enregistrement », « télécharger un fichier », « se faire passer pour un utilisateur », etc.
Fonctionnement
Le processus se déroule en trois étapes :
- Le développeur crée le type de permission en mode développeur pour un DocType.
- Le développeur ajoute les vérifications de permission dans le code, à l’endroit où l’action est exécutée.
- Le System Manager attribue la permission aux rôles dans l’interface du bureau (Desk).
Le type de permission est enregistré comme fixture et livré avec votre app.
Exemple : créer une permission « approve » sur Invoice
Étape 1 : créer le type de permission (développeur)
- Activez le mode développeur et connectez-vous en tant qu’Administrator.
- Créez un nouvel enregistrement Permission Type.
- Renseignez Perm Type avec
approveet DocType avecInvoice. - Enregistrez.
Le type de permission est créé et sera exporté avec votre app.
Étape 2 : ajouter les vérifications dans le code (développeur)
Dans le contrôleur Invoice, ou dans les fonctions qui gèrent les approbations, vérifiez la permission :
@frappe.whitelist()
def approve_invoice(invoice_name):
invoice = frappe.get_doc("Invoice", invoice_name)
if not frappe.has_permission(invoice, "approve"):
frappe.throw("Not permitted to approve", frappe.PermissionError)
invoice.approval_status = "Approved"
invoice.save()Vous pouvez aussi vérifier sans lever d’erreur :
if frappe.has_permission(invoice, "approve"):
# show approve button on frontendÉtape 3 : attribuer la permission aux rôles (System Manager)
Une fois votre app installée, les System Managers attribuent la permission aux rôles :
- Ouvrez le Role Permission Manager.
- Sélectionnez le DocType Invoice.
- Pour chaque rôle, cochez ou décochez la colonne « Approve », comme pour les autres permissions.
- La permission s’applique désormais à tous les utilisateurs ayant ce rôle.
C’est tout : les utilisateurs disposant de la permission « approve » peuvent effectuer l’action, les autres reçoivent une erreur.
Vérifier la permission
Utilisez frappe.has_permission() dans votre code Python :
# Check document-level permission
if frappe.has_permission(invoice_doc, "approve"):
# User can approve this invoice
# Check DocType-level permission
if frappe.has_permission("Invoice", "approve"):
# User can approve any invoice| Appel | Portée |
|---|---|
frappe.has_permission(invoice_doc, "approve") | Permission au niveau du document : l’utilisateur peut approuver cette facture |
frappe.has_permission("Invoice", "approve") | Permission au niveau du DocType : l’utilisateur peut approuver n’importe quelle facture |
