diff --git a/netbox/netbox/navigation/__init__.py b/netbox/netbox/navigation/__init__.py index a05b1c495..61e0466db 100644 --- a/netbox/netbox/navigation/__init__.py +++ b/netbox/netbox/navigation/__init__.py @@ -60,17 +60,25 @@ class Menu: # Utility functions # -def get_model_item(app_label, model_name, label, actions=('add', 'import')): +def get_model_item(app_label, model_name, label, actions=('add', 'import'), permission_app_label=None, permission_model_name=None): + if not permission_app_label: + permission_app_label = app_label + if not permission_model_name: + permission_model_name = model_name return MenuItem( link=f'{app_label}:{model_name}_list', link_text=label, - permissions=[f'{app_label}.view_{model_name}'], - buttons=get_model_buttons(app_label, model_name, actions) + permissions=[f'{permission_app_label}.view_{permission_model_name}'], + buttons=get_model_buttons(app_label, model_name, actions, permission_app_label, permission_model_name) ) -def get_model_buttons(app_label, model_name, actions=('add', 'import')): +def get_model_buttons(app_label, model_name, actions=('add', 'import'), permission_app_label=None, permission_model_name=None): buttons = [] + if not permission_app_label: + permission_app_label = app_label + if not permission_model_name: + permission_model_name = model_name if 'add' in actions: buttons.append( @@ -78,7 +86,7 @@ def get_model_buttons(app_label, model_name, actions=('add', 'import')): link=f'{app_label}:{model_name}_add', title='Add', icon_class='mdi mdi-plus-thick', - permissions=[f'{app_label}.add_{model_name}'], + permissions=[f'{permission_app_label}.add_{permission_model_name}'], color=ButtonColorChoices.GREEN ) ) @@ -88,7 +96,7 @@ def get_model_buttons(app_label, model_name, actions=('add', 'import')): link=f'{app_label}:{model_name}_import', title='Import', icon_class='mdi mdi-upload', - permissions=[f'{app_label}.add_{model_name}'], + permissions=[f'{permission_app_label}.add_{permission_model_name}'], color=ButtonColorChoices.CYAN ) ) diff --git a/netbox/netbox/navigation/menu.py b/netbox/netbox/navigation/menu.py index 159751279..d94160d34 100644 --- a/netbox/netbox/navigation/menu.py +++ b/netbox/netbox/navigation/menu.py @@ -353,8 +353,8 @@ ADMIN_MENU = Menu( MenuGroup( label=_('Users'), items=( - get_model_item('users', 'netboxuser', _('Users'), actions=['add']), - get_model_item('users', 'netboxgroup', _('Groups'), actions=['add']), + get_model_item('users', 'netboxuser', _('Users'), actions=['add'], permission_app_label='auth', permission_model_name='users'), + get_model_item('users', 'netboxgroup', _('Groups'), actions=['add'], permission_app_label='auth', permission_model_name='groups'), get_model_item('users', 'objectpermission', _('Permissions'), actions=['add']), ), ),