Permissions on menu items
Every link can declare a permission. Users who don't have that permission don't see the link.
This is the easiest way to give different roles different navigation without building separate menus per role.
How it works
On any link, set the Permission field to the name of a permission you've defined elsewhere (under Roles & Permissions).
Link: "Approve Leave" → permission: leaves.approve
At render time, Luna asks the platform "does this user have
leaves.approve?". If yes — show the link. If no — hide it entirely
(no greyed-out, no half-visible item).
Leave the field empty for "everyone"
A link with no permission set is visible to all signed-in users. Most links in a typical menu work this way — only privileged actions like "Approve", "Bulk Edit", "Delete All" need a permission.
Children inherit visibility
If a parent link is hidden (the user lacks its permission), all children stay hidden too. You don't need to set the permission on every child individually.
A clean pattern
Use one menu per app, but split it into role-aware groups:
DASHBOARD ← always visible
Home
─────────
APPLICATIONS ← always visible
My Applications
Submit New
─────────
APPROVALS ← permission: leaves.approve
Pending My Approval
─────────
ADMIN ← permission: app.admin
Users
Settings
Reports
A staff member sees the top three regions. An approver also sees the fourth. An admin sees all five. Same menu definition, different output.
Where to next
- Common mistakes.