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):