Skip to main content

Menu

This section demonstrates how to define menu items using the SBAdminRoleConfiguration class.

Defining Menu Items

To create a custom menu, define a list of SBAdminMenuItem instances and pass them to SBAdminRoleConfiguration.

sb_admin_configuration.py
config = SBAdminRoleConfiguration(
default_view=SBAdminMenuItem(view_id="dashboard"),
menu_items=[
SBAdminMenuItem(view_id="dashboard", icon="All-application"),
SBAdminMenuItem(view_id="catalog_product", icon="List-checkbox", label="Catalog",
sub_items=[SBAdminMenuItem(view_id="catalog_category"),
SBAdminMenuItem(view_id="catalog_manufacturer"),
SBAdminMenuItem(view_id="catalog_product")
]
)
],
registered_views=[...],
)

Each SBAdminMenuItem accepts the following key parameters:

  • view_id: Unique identifier of the view this item links to.
  • icon (optional): The icon name from Available icons.
  • label (optional): Overrides the default label.
  • url (optional): Custom URL for the menu item. Can be a string or a callable (request) -> str. When provided, this URL is used instead of the auto-generated URL from view_id. Useful for linking to external pages or custom views not registered in SBAdmin.
  • sub_items (optional): A list of nested SBAdminMenuItem objects, supporting menu nesting.
sb_admin_configuration.py
# Link to an external URL
SBAdminMenuItem(label="Documentation", icon="Help", url="https://docs.example.com")

# Dynamic URL based on request
SBAdminMenuItem(label="Profile", icon="User-business", url=lambda request: f"/users/{request.user.pk}/")

SBAdminRoleConfiguration Parameters

ParameterTypeDefaultDescription
default_viewSBAdminMenuItemNoneThe default view shown after login
menu_itemslist[]List of SBAdminMenuItem instances for the sidebar menu
registered_viewslist[]Additional views to register (e.g., SBAdminDashboardView)
global_filter_formForm classNoneDjango form class for global sidebar filters
filters_versionFilterVersionsFILTERS_VERSION_1Filter UI version — use FilterVersions.FILTERS_VERSION_2 for advanced filters
default_color_schemeColorSchemeColorScheme.AUTODefault color scheme (ColorScheme.AUTO, ColorScheme.LIGHT, or ColorScheme.DARK)
login_view_classView classLoginViewCustom login view class
admin_titlestr"SBAdmin"Title displayed in the admin header
sb_admin_configuration.py
from django_smartbase_admin.engine.configuration import SBAdminRoleConfiguration
from django_smartbase_admin.engine.const import FilterVersions
from django_smartbase_admin.models import ColorScheme

config = SBAdminRoleConfiguration(
default_view=SBAdminMenuItem(view_id="dashboard"),
menu_items=[...],
registered_views=[...],
default_color_scheme=ColorScheme.LIGHT,
admin_title="My Admin",
filters_version=FilterVersions.FILTERS_VERSION_2,
)

Role-Based Menu Configuration

You can define different menus for different user roles by extending SBAdminRoleConfiguration and using get_configuration_for_roles in your SBAdminConfiguration.

Step 1: Define Menu Variants

sb_admin_configuration.py
admin_menu_items = [
SBAdminMenuItem(view_id="dashboard", icon="All-application"),
SBAdminMenuItem(
label="Catalog",
icon="Box",
sub_items=[
SBAdminMenuItem(view_id="catalog_product", label="Products"),
SBAdminMenuItem(view_id="catalog_category", label="Categories"),
SBAdminMenuItem(view_id="catalog_manufacturer", label="Manufacturers"),
],
),
SBAdminMenuItem(view_id="catalog_product", label="List View", icon="List-checkbox"),
SBAdminMenuItem(view_id="catalog_purchase", label="Advanced filters", icon="Filter"),
]

editor_menu_items = [
SBAdminMenuItem(view_id="catalog_product", icon="List-checkbox", label="List View"),
SBAdminMenuItem(view_id="catalog_category", icon="List-checkbox", label="Tree View"),
SBAdminMenuItem(view_id="catalog_manufacturer", icon="Box"),
]

Step 2: Create Role-Based Configurations

sb_admin_configuration.py
class AdminConfiguration(SBAdminRoleConfiguration):
menu_items = admin_menu_items
default_view = SBAdminMenuItem(view_id="dashboard")
registered_views = [...]


class EditorConfiguration(SBAdminRoleConfiguration):
menu_items = editor_menu_items
default_view = SBAdminMenuItem(view_id="catalog_product")
registered_views = [...]

Step 3: Return the Configuration Based on User Role

sb_admin_configuration.py
EDITOR_ROLE = "Editors"

class SBAdminConfiguration(SBAdminConfigurationBase):
def get_configuration_for_roles(self, user_roles):
user_roles = list(user_roles)
if EDITOR_ROLE in user_roles:
return EditorConfiguration()
return AdminConfiguration()

With this setup, each user will see a customized menu based on their role. You can extend this further to support more roles or dynamic permissions.