Skip to content
Sidebar Configuration

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 Configuration in the sidebar, then the Home tab.
  • Edit the SIDEBAR_CONTENT textarea 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: export
  • label (optional) - header text. Defaults to the section value itself.
  • entries - a list of schema / app / link items (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’s entries.
  • 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 app key 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_allowed
  • link - 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_allowed

Error 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, app keys 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.