What problem does it solve?
This Skill prevents Frappe/ERPNext permission bugs that look correct but fail in production, helping you reliably control who can access what, and which fields they can see or mask.
Core Features & Use Cases
- Permission decisioning across layers: Applies the Frappe permission model end-to-end (role permissions, user permissions, perm levels, permission hooks, and v16+ data masking).
- Production-safe APIs & patterns: Standardizes how to check permissions with frappe.has_permission(), document methods, and permission-aware listing via frappe.get_list() instead of permission-bypassing get_all().
- Row-level and custom deny logic: Uses has_permission and permission_query_conditions hooks correctly for safe denial-only behavior and consistent row filtering.
- Security guardrails: Covers critical anti-patterns like SQL injection in query hooks, missing table prefixes, returning True from has_permission hooks, and undocumented ignore_permissions.
Quick Start
Implement permission checks by asking an AI: "Use the frappe-core-permissions Skill to generate a secure has_permission hook for Sales Order write access, plus a permission_query_conditions hook for list filtering, ensuring all SQL inputs are escaped, the hook returns None by default, and user-facing queries use frappe.get_list()."