Sidebar Configuration
The left-hand sidebar is driven by a single YAML structure stored in the SIDEBAR_CONTENT
configuration entry (Home app). Each top-level item in the list is one row in the sidebar, from
top to bottom.
Editing
- Go to
Configurationin the sidebar, then theHometab. - Edit the
SIDEBAR_CONTENTtextarea and save. - The YAML is validated on save - an invalid structure is rejected with an error, nothing is written.
- Changes take effect immediately for the saving user. Other already-logged-in users may see the previous sidebar for up to ~1 minute (short per-user cache).
Permission needed: p_conf_admin
Item types
Every item is a YAML mapping with exactly one of these keys: section, schema, app, link.
section
Groups a list of entries under a header.
- section: "Tools"
entries:
- app: import
- app: exportlabel(optional) - header text. Defaults to thesectionvalue itself.entries- a list ofschema/app/linkitems (sections cannot be nested).- A section with zero visible entries (e.g. everyone lacking the required permission) is dropped entirely - its header is never shown on its own.
schema
A link to a schema’s instance list.
- schema: laptop
label: "Laptops"- Can appear at the top level or inside a
section’sentries. - Visibility is not configurable here - it always follows the schema’s own read permission (the same check the schema’s list page itself uses), so a sidebar entry can never expose a schema the current user couldn’t otherwise access.
label(optional) - defaults to the schema’s display name, then its keyname.icon(optional) - defaults to the schema’s configured icon.
app
A link to one of Cavaliba’s built-in entry points, identified by a fixed keyname. See
App Widgets for the full list of available keys, their default
label and required permission - that registry (APP_REGISTRY in app_home/home.py) is shared
with DASHBOARD_CONTENT’s own app: entries.
- app: import
- app: ipam
icon: 'fa-plus'
label: "Custom IPAM label"label,icon,permission(all optional) - override the registry default for this entry only.- Setting
permission:to an empty/no value makes the entry visible to any authenticated user, regardless of the registry default. - An unknown
appkey is skipped (logged as a warning) rather than breaking the sidebar.
link
A raw URL, absolute or relative, with an optional permission gate.
- link: "/path/to/a/link"
icon: fa-plus
label: "my label"
permission: p_this_link_allowedlink- the URL, used as-is (never resolved/rewritten).label(optional) - defaults to the URL itself.icon(optional) - defaults to a generic icon.permission(optional) - if omitted, visible to any authenticated user.
Full example
- section: "Services"
entries:
- app: sirene
label: Sirene Notification
- app: ipam
icon: 'fa-plus'
- app: sirene_archive
- schema: user
label: "Users"
- schema: group
label: "User Groups"
- section: "Assets management"
entries:
- schema: laptop
label: "Laptops"
- schema: printer
- app: all_schemas
label: "[...] more"
- section: "Tools"
entries:
- app: import
- app: export
- app: admintools
- app: configuration
- app: code_editor
- link: "/path/to/a/link"
icon: fa-plus
label: "my label"
permission: p_this_link_allowedError handling
- On save: the YAML is parsed and structurally validated (must be a list, each item must have
exactly one of
section/schema/app/link,appkeys must exist in the App Widgets registry, etc.). An invalid submission is rejected and nothing is saved. - At render time: as a safety net for anything validation can’t catch (e.g. a schema deleted after the sidebar was saved), a parse/lookup error falls back to an empty sidebar for regular users, or a single “Fix sidebar configuration” link (to this Configuration page) for admins - instead of breaking the page for every user.
Upgrading from an older version
Versions before 5.0.0 configured the sidebar via DashboardApp entries (Django admin / builtin
YAML), grouped by their sidebar_section field. On upgrade, SIDEBAR_CONTENT is seeded from the
built-in default shown throughout this page - any sidebar customization made through the old
DashboardApp-driven system (entries added/reordered/re-permissioned via Django admin) is
not carried over automatically and must be reproduced by hand in the new YAML. DashboardApp
itself still exists and still drives the Home dashboard tiles; it no longer drives the sidebar.