frappe-core-permissions

Solid

Use when implementing the Frappe/ERPNext permission system. Covers roles, user permissions, perm levels, data masking, and permission hooks for v14/v15/v16. Prevents common access control mistakes and security issues. Keywords: permissions, roles, user permissions, perm levels, data masking,, restrict records, who can see what, department access, row-level, user cannot see document, access denied. access control, security, has_permission.

Data & Documents 109 stars 35 forks Updated 1 months ago NOASSERTION

Install

View on GitHub

Quality Score: 78/100

Stars 20%
68
Recency 20%
75
Frontmatter 20%
70
Documentation 15%
100
Issue Health 10%
50
License 10%
100
Description 5%
100

Skill Content

# Frappe Permissions > Deterministic patterns for the five-layer Frappe permission system. --- ## Permission Layers | Layer | Controls | Configured Via | Version | |-------|----------|----------------|---------| | **Role Permissions** | What users CAN do | DocType permissions table | All | | **User Permissions** | WHICH records users see | User Permission DocType | All | | **Perm Levels** | WHICH fields users see/edit | Field `permlevel` property | All | | **Permission Hooks** | Custom deny logic | `hooks.py` | All | | **Data Masking** | Masked field values | Field `mask` property | [v16+] | --- ## Decision Tree ``` Need to control access? ├── Who can Create/Read/Write/Delete a DocType? → Role Permissions ├── Which specific records can a user see? → User Permissions ├── Which fields should be hidden? → Perm Levels (permlevel 1+) ├── Which fields show masked values? → Data Masking [v16+] ├── Custom runtime deny logic? → has_permission hook ├── Filter list queries dynamically? → permission_query_conditions hook └── Share one document with one user? → frappe.share Checking permissions in code? ├── Before action → frappe.has_permission() or doc.has_permission() ├── Raise on denial → doc.check_permission() or throw=True ├── System bypass → doc.flags.ignore_permissions = True (ALWAYS document why) └── List query → ALWAYS use frappe.get_list() for user-facing data ``` --- ## Permission Types | Type | API Check | Applies To | |------|-----------|------------| | `read` | `f...

Details

Author
OpenAEC-Foundation
Repository
OpenAEC-Foundation/Frappe_Claude_Skill_Package
Created
4 months ago
Last Updated
1 months ago
Language
Python
License
NOASSERTION

Integrates with

Similar Skills

Semantically similar based on skill content — not just same category