Role Hierarchy
Frappe Helpdesk defines several roles with different permission levels:Customer
- Can create tickets via customer portal
- Can view their own tickets
- Can comment on their tickets
- Can view public knowledge base articles
- Cannot access agent dashboard or settings
Agent
- Can view assigned tickets
- Can respond to and update tickets
- Can create saved replies (personal or global)
- Can view knowledge base articles
- Can access agent dashboard
- Limited to tickets within their permission scope
Agent Manager
- All Agent permissions
- Can manage other agents
- Can create and edit teams
- Can configure assignment rules
- Can access helpdesk settings
- Can view all tickets (subject to team restrictions)
- Includes System Manager role for administrative access
System Manager
- Full administrative access
- Can configure all helpdesk settings
- Can manage users and roles
- Can customize doctypes and workflows
- Can access all data without restrictions
Team-Based Permissions
When team restrictions are enabled, permissions are further controlled:Enable team-based access control for tickets.When enabled:
- Agents can only view tickets assigned to their team(s)
- Ticket queries are filtered by team membership
- Cross-team visibility requires explicit permission or Manager role
Allow agents to see tickets that don’t have a team assigned.Only applies when
restrict_tickets_by_agent_group is enabled.Restrict ticket assignment to team members only.When enabled, agents can only assign tickets to members of the ticket’s team.
Permission Logic
The system implements custom permission checks in doctypes:Guest Ticket Creation
Control whether unauthenticated users can create tickets:Allow guest users to create tickets without authentication.When enabled:
- Adds “create” permission for Guest role on HD Ticket
- Useful for webform integrations
- Automatically removed when disabled
Saved Replies Permissions
Disable global saved replies when team restrictions are enabled.When enabled:
- Agents can only create team-scoped saved replies
- Existing global replies are hidden
- Useful for organizations with strict team separation
Query Filtering
Permissions are enforced at the database query level using Frappe Query Builder:Permission API
Check User Permissions
Grant Permissions
Permission Levels
Frappe supports different permission types:- Read: View the document
- Write: Edit the document
- Create: Create new documents
- Delete: Delete documents
- Submit: Submit documents (if submittable)
- Cancel: Cancel submitted documents
- Amend: Amend cancelled documents
has_permission methods.
Field-Level Permissions
Restrict access to specific fields based on roles:Best Practices
- Principle of Least Privilege: Grant minimum permissions needed
- Use Teams: Organize agents into teams for natural permission boundaries
- Regular Audits: Review role assignments quarterly
- Test Restrictions: Verify team restrictions work as expected before enabling
- Document Custom Logic: Comment custom permission code thoroughly
- Monitor Access: Log permission-related issues for security review
- Avoid Bypassing: Use
ignore_permissions=Truesparingly and only when necessary
Custom Permission Rules
Extend permissions with custom logic:Security Considerations
- SQL Injection: Always use Query Builder or parameterized queries
- XSS Prevention: Sanitize user input in custom fields
- CSRF Protection: Frappe automatically handles this for whitelisted methods
- Session Hijacking: Use secure cookies and HTTPS in production
- Data Leakage: Test permission filters thoroughly to prevent unauthorized access
Troubleshooting
- Permission Denied: Check user’s roles and team membership
- Can’t See Tickets: Verify team restrictions settings and team assignments
- Assignment Fails: Check
assign_within_teamsetting and team membership - Guest Creation Not Working: Verify
allow_anyone_to_create_ticketsis enabled - Custom Permissions Not Applied: Clear cache and restart server after permission changes