From a117cc75262ec1d4958bcfe8e17c52a5ebfb7897 Mon Sep 17 00:00:00 2001 From: Jason Novinger Date: Tue, 3 Mar 2026 15:44:40 -0600 Subject: [PATCH] Prevent duplicate action registration in register_model_actions() --- netbox/utilities/permissions.py | 3 ++- netbox/utilities/tests/test_permissions.py | 6 ++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/netbox/utilities/permissions.py b/netbox/utilities/permissions.py index b1f612266..8766168f1 100644 --- a/netbox/utilities/permissions.py +++ b/netbox/utilities/permissions.py @@ -53,7 +53,8 @@ def register_model_actions(model: type[Model], actions: list[ModelAction | str]) for action in actions: if isinstance(action, str): action = ModelAction(name=action) - registry['model_actions'][label].append(action) + if action not in registry['model_actions'][label]: + registry['model_actions'][label].append(action) def get_permission_for_model(model, action): diff --git a/netbox/utilities/tests/test_permissions.py b/netbox/utilities/tests/test_permissions.py index c4e123b31..bfd151475 100644 --- a/netbox/utilities/tests/test_permissions.py +++ b/netbox/utilities/tests/test_permissions.py @@ -80,6 +80,12 @@ class RegisterModelActionsTest(TestCase): self.assertEqual(actions[0].name, 'first') self.assertEqual(actions[1].name, 'second') + def test_duplicate_registration_ignored(self): + register_model_actions(Site, [ModelAction('sync')]) + register_model_actions(Site, [ModelAction('sync', help_text='Different help')]) + actions = registry['model_actions']['dcim.site'] + self.assertEqual(len(actions), 1) + class ObjectPermissionFormTest(TestCase):