Manual Menus

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.