Răsfoiți Sursa

Closes #13311: Always use get_permission_for_model() to resolve permission names

Jeremy Stretch 2 ani în urmă
părinte
comite
ca634be7ad

+ 1 - 1
netbox/netbox/authentication.py

@@ -119,7 +119,7 @@ class ObjectPermissionMixin:
             return True
 
         # Sanity check: Ensure that the requested permission applies to the specified object
-        model = obj._meta.model
+        model = obj._meta.concrete_model
         if model._meta.label_lower != '.'.join((app_label, model_name)):
             raise ValueError(f"Invalid permission {perm} for model {model}")
 

+ 2 - 1
netbox/netbox/tables/columns.py

@@ -16,6 +16,7 @@ from django_tables2.columns import library
 from django_tables2.utils import Accessor
 
 from extras.choices import CustomFieldTypeChoices
+from utilities.permissions import get_permission_for_model
 from utilities.templatetags.builtins.filters import render_markdown
 from utilities.utils import content_type_identifier, content_type_name, get_viewname
 
@@ -250,7 +251,7 @@ class ActionsColumn(tables.Column):
         dropdown_links = []
         user = getattr(request, 'user', AnonymousUser())
         for idx, (action, attrs) in enumerate(self.actions.items()):
-            permission = f'{model._meta.app_label}.{attrs.permission}_{model._meta.model_name}'
+            permission = get_permission_for_model(model, attrs.permission)
             if attrs.permission is None or user.has_perm(permission):
                 url = reverse(get_viewname(model, action), kwargs={'pk': record.pk})
 

+ 4 - 4
netbox/utilities/templatetags/perms.py

@@ -1,5 +1,7 @@
 from django import template
 
+from utilities.permissions import get_permission_for_model
+
 __all__ = (
     'can_add',
     'can_change',
@@ -12,10 +14,8 @@ register = template.Library()
 
 
 def _check_permission(user, instance, action):
-    return user.has_perm(
-        perm=f'{instance._meta.app_label}.{action}_{instance._meta.model_name}',
-        obj=instance
-    )
+    permission = get_permission_for_model(instance, action)
+    return user.has_perm(perm=permission, obj=instance)
 
 
 @register.filter()