Skip to content

Commit 450790a

Browse files
Closes #13550: Refactor view action mappings (#14062)
* Merge actions and action_perms into a single mapping * Update obsolete permission maps * Update obsolete action lists * Normalize empty permission mappings * Cleanup * Add deprecation warnings * Introduce DEFAULT_ACTION_PERMISSIONS constant
1 parent 3f40ee5 commit 450790a

File tree

7 files changed

+165
-117
lines changed

7 files changed

+165
-117
lines changed

netbox/core/views.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,9 @@ class DataFileListView(generic.ObjectListView):
100100
filterset = filtersets.DataFileFilterSet
101101
filterset_form = forms.DataFileFilterForm
102102
table = tables.DataFileTable
103-
actions = ('bulk_delete',)
103+
actions = {
104+
'bulk_delete': {'delete'},
105+
}
104106

105107

106108
@register_model_view(DataFile)
@@ -128,7 +130,10 @@ class JobListView(generic.ObjectListView):
128130
filterset = filtersets.JobFilterSet
129131
filterset_form = forms.JobFilterForm
130132
table = tables.JobTable
131-
actions = ('export', 'delete', 'bulk_delete')
133+
actions = {
134+
'export': {'view'},
135+
'bulk_delete': {'delete'},
136+
}
132137

133138

134139
class JobView(generic.ObjectView):

netbox/dcim/views.py

Lines changed: 61 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
from extras.views import ObjectConfigContextView
2121
from ipam.models import ASN, IPAddress, Prefix, VLAN, VLANGroup
2222
from ipam.tables import InterfaceVLANTable
23+
from netbox.constants import DEFAULT_ACTION_PERMISSIONS
2324
from netbox.views import generic
2425
from tenancy.views import ObjectContactsView
2526
from utilities.forms import ConfirmationForm
@@ -46,15 +47,11 @@
4647

4748

4849
class DeviceComponentsView(generic.ObjectChildrenView):
49-
actions = ('add', 'import', 'export', 'bulk_edit', 'bulk_delete', 'bulk_rename', 'bulk_disconnect')
50-
action_perms = defaultdict(set, **{
51-
'add': {'add'},
52-
'import': {'add'},
53-
'bulk_edit': {'change'},
54-
'bulk_delete': {'delete'},
50+
actions = {
51+
**DEFAULT_ACTION_PERMISSIONS,
5552
'bulk_rename': {'change'},
5653
'bulk_disconnect': {'change'},
57-
})
54+
}
5855
queryset = Device.objects.all()
5956

6057
def get_children(self, request, parent):
@@ -1977,7 +1974,10 @@ class DeviceModuleBaysView(DeviceComponentsView):
19771974
table = tables.DeviceModuleBayTable
19781975
filterset = filtersets.ModuleBayFilterSet
19791976
template_name = 'dcim/device/modulebays.html'
1980-
actions = ('add', 'import', 'export', 'bulk_edit', 'bulk_delete', 'bulk_rename')
1977+
actions = {
1978+
**DEFAULT_ACTION_PERMISSIONS,
1979+
'bulk_rename': {'change'},
1980+
}
19811981
tab = ViewTab(
19821982
label=_('Module Bays'),
19831983
badge=lambda obj: obj.module_bay_count,
@@ -1993,7 +1993,10 @@ class DeviceDeviceBaysView(DeviceComponentsView):
19931993
table = tables.DeviceDeviceBayTable
19941994
filterset = filtersets.DeviceBayFilterSet
19951995
template_name = 'dcim/device/devicebays.html'
1996-
actions = ('add', 'import', 'export', 'bulk_edit', 'bulk_delete', 'bulk_rename')
1996+
actions = {
1997+
**DEFAULT_ACTION_PERMISSIONS,
1998+
'bulk_rename': {'change'},
1999+
}
19972000
tab = ViewTab(
19982001
label=_('Device Bays'),
19992002
badge=lambda obj: obj.device_bay_count,
@@ -2005,11 +2008,14 @@ class DeviceDeviceBaysView(DeviceComponentsView):
20052008

20062009
@register_model_view(Device, 'inventory')
20072010
class DeviceInventoryView(DeviceComponentsView):
2008-
actions = ('add', 'import', 'export', 'bulk_edit', 'bulk_delete', 'bulk_rename')
20092011
child_model = InventoryItem
20102012
table = tables.DeviceInventoryItemTable
20112013
filterset = filtersets.InventoryItemFilterSet
20122014
template_name = 'dcim/device/inventory.html'
2015+
actions = {
2016+
**DEFAULT_ACTION_PERMISSIONS,
2017+
'bulk_rename': {'change'},
2018+
}
20132019
tab = ViewTab(
20142020
label=_('Inventory Items'),
20152021
badge=lambda obj: obj.inventory_item_count,
@@ -2187,14 +2193,10 @@ class ConsolePortListView(generic.ObjectListView):
21872193
filterset_form = forms.ConsolePortFilterForm
21882194
table = tables.ConsolePortTable
21892195
template_name = 'dcim/component_list.html'
2190-
actions = ('add', 'import', 'export', 'bulk_edit', 'bulk_delete', 'bulk_rename')
2191-
action_perms = defaultdict(set, **{
2192-
'add': {'add'},
2193-
'import': {'add'},
2194-
'bulk_edit': {'change'},
2195-
'bulk_delete': {'delete'},
2196+
actions = {
2197+
**DEFAULT_ACTION_PERMISSIONS,
21962198
'bulk_rename': {'change'},
2197-
})
2199+
}
21982200

21992201

22002202
@register_model_view(ConsolePort)
@@ -2259,14 +2261,10 @@ class ConsoleServerPortListView(generic.ObjectListView):
22592261
filterset_form = forms.ConsoleServerPortFilterForm
22602262
table = tables.ConsoleServerPortTable
22612263
template_name = 'dcim/component_list.html'
2262-
actions = ('add', 'import', 'export', 'bulk_edit', 'bulk_delete', 'bulk_rename')
2263-
action_perms = defaultdict(set, **{
2264-
'add': {'add'},
2265-
'import': {'add'},
2266-
'bulk_edit': {'change'},
2267-
'bulk_delete': {'delete'},
2264+
actions = {
2265+
**DEFAULT_ACTION_PERMISSIONS,
22682266
'bulk_rename': {'change'},
2269-
})
2267+
}
22702268

22712269

22722270
@register_model_view(ConsoleServerPort)
@@ -2331,14 +2329,10 @@ class PowerPortListView(generic.ObjectListView):
23312329
filterset_form = forms.PowerPortFilterForm
23322330
table = tables.PowerPortTable
23332331
template_name = 'dcim/component_list.html'
2334-
actions = ('add', 'import', 'export', 'bulk_edit', 'bulk_delete', 'bulk_rename')
2335-
action_perms = defaultdict(set, **{
2336-
'add': {'add'},
2337-
'import': {'add'},
2338-
'bulk_edit': {'change'},
2339-
'bulk_delete': {'delete'},
2332+
actions = {
2333+
**DEFAULT_ACTION_PERMISSIONS,
23402334
'bulk_rename': {'change'},
2341-
})
2335+
}
23422336

23432337

23442338
@register_model_view(PowerPort)
@@ -2403,14 +2397,10 @@ class PowerOutletListView(generic.ObjectListView):
24032397
filterset_form = forms.PowerOutletFilterForm
24042398
table = tables.PowerOutletTable
24052399
template_name = 'dcim/component_list.html'
2406-
actions = ('add', 'import', 'export', 'bulk_edit', 'bulk_delete', 'bulk_rename')
2407-
action_perms = defaultdict(set, **{
2408-
'add': {'add'},
2409-
'import': {'add'},
2410-
'bulk_edit': {'change'},
2411-
'bulk_delete': {'delete'},
2400+
actions = {
2401+
**DEFAULT_ACTION_PERMISSIONS,
24122402
'bulk_rename': {'change'},
2413-
})
2403+
}
24142404

24152405

24162406
@register_model_view(PowerOutlet)
@@ -2475,14 +2465,10 @@ class InterfaceListView(generic.ObjectListView):
24752465
filterset_form = forms.InterfaceFilterForm
24762466
table = tables.InterfaceTable
24772467
template_name = 'dcim/component_list.html'
2478-
actions = ('add', 'import', 'export', 'bulk_edit', 'bulk_delete', 'bulk_rename')
2479-
action_perms = defaultdict(set, **{
2480-
'add': {'add'},
2481-
'import': {'add'},
2482-
'bulk_edit': {'change'},
2483-
'bulk_delete': {'delete'},
2468+
actions = {
2469+
**DEFAULT_ACTION_PERMISSIONS,
24842470
'bulk_rename': {'change'},
2485-
})
2471+
}
24862472

24872473

24882474
@register_model_view(Interface)
@@ -2595,14 +2581,10 @@ class FrontPortListView(generic.ObjectListView):
25952581
filterset_form = forms.FrontPortFilterForm
25962582
table = tables.FrontPortTable
25972583
template_name = 'dcim/component_list.html'
2598-
actions = ('add', 'import', 'export', 'bulk_edit', 'bulk_delete', 'bulk_rename')
2599-
action_perms = defaultdict(set, **{
2600-
'add': {'add'},
2601-
'import': {'add'},
2602-
'bulk_edit': {'change'},
2603-
'bulk_delete': {'delete'},
2584+
actions = {
2585+
**DEFAULT_ACTION_PERMISSIONS,
26042586
'bulk_rename': {'change'},
2605-
})
2587+
}
26062588

26072589

26082590
@register_model_view(FrontPort)
@@ -2667,14 +2649,10 @@ class RearPortListView(generic.ObjectListView):
26672649
filterset_form = forms.RearPortFilterForm
26682650
table = tables.RearPortTable
26692651
template_name = 'dcim/component_list.html'
2670-
actions = ('add', 'import', 'export', 'bulk_edit', 'bulk_delete', 'bulk_rename')
2671-
action_perms = defaultdict(set, **{
2672-
'add': {'add'},
2673-
'import': {'add'},
2674-
'bulk_edit': {'change'},
2675-
'bulk_delete': {'delete'},
2652+
actions = {
2653+
**DEFAULT_ACTION_PERMISSIONS,
26762654
'bulk_rename': {'change'},
2677-
})
2655+
}
26782656

26792657

26802658
@register_model_view(RearPort)
@@ -2739,14 +2717,10 @@ class ModuleBayListView(generic.ObjectListView):
27392717
filterset_form = forms.ModuleBayFilterForm
27402718
table = tables.ModuleBayTable
27412719
template_name = 'dcim/component_list.html'
2742-
actions = ('add', 'import', 'export', 'bulk_edit', 'bulk_delete', 'bulk_rename')
2743-
action_perms = defaultdict(set, **{
2744-
'add': {'add'},
2745-
'import': {'add'},
2746-
'bulk_edit': {'change'},
2747-
'bulk_delete': {'delete'},
2720+
actions = {
2721+
**DEFAULT_ACTION_PERMISSIONS,
27482722
'bulk_rename': {'change'},
2749-
})
2723+
}
27502724

27512725

27522726
@register_model_view(ModuleBay)
@@ -2803,14 +2777,10 @@ class DeviceBayListView(generic.ObjectListView):
28032777
filterset_form = forms.DeviceBayFilterForm
28042778
table = tables.DeviceBayTable
28052779
template_name = 'dcim/component_list.html'
2806-
actions = ('add', 'import', 'export', 'bulk_edit', 'bulk_delete', 'bulk_rename')
2807-
action_perms = defaultdict(set, **{
2808-
'add': {'add'},
2809-
'import': {'add'},
2810-
'bulk_edit': {'change'},
2811-
'bulk_delete': {'delete'},
2780+
actions = {
2781+
**DEFAULT_ACTION_PERMISSIONS,
28122782
'bulk_rename': {'change'},
2813-
})
2783+
}
28142784

28152785

28162786
@register_model_view(DeviceBay)
@@ -2936,14 +2906,10 @@ class InventoryItemListView(generic.ObjectListView):
29362906
filterset_form = forms.InventoryItemFilterForm
29372907
table = tables.InventoryItemTable
29382908
template_name = 'dcim/component_list.html'
2939-
actions = ('add', 'import', 'export', 'bulk_edit', 'bulk_delete', 'bulk_rename')
2940-
action_perms = defaultdict(set, **{
2941-
'add': {'add'},
2942-
'import': {'add'},
2943-
'bulk_edit': {'change'},
2944-
'bulk_delete': {'delete'},
2909+
actions = {
2910+
**DEFAULT_ACTION_PERMISSIONS,
29452911
'bulk_rename': {'change'},
2946-
})
2912+
}
29472913

29482914

29492915
@register_model_view(InventoryItem)
@@ -3175,7 +3141,12 @@ class CableListView(generic.ObjectListView):
31753141
filterset = filtersets.CableFilterSet
31763142
filterset_form = forms.CableFilterForm
31773143
table = tables.CableTable
3178-
actions = ('import', 'export', 'bulk_edit', 'bulk_delete')
3144+
actions = {
3145+
'import': {'add'},
3146+
'export': {'view'},
3147+
'bulk_edit': {'change'},
3148+
'bulk_delete': {'delete'},
3149+
}
31793150

31803151

31813152
@register_model_view(Cable)
@@ -3269,7 +3240,9 @@ class ConsoleConnectionsListView(generic.ObjectListView):
32693240
filterset_form = forms.ConsoleConnectionFilterForm
32703241
table = tables.ConsoleConnectionTable
32713242
template_name = 'dcim/connections_list.html'
3272-
actions = ('export',)
3243+
actions = {
3244+
'export': {'view'},
3245+
}
32733246

32743247
def get_extra_context(self, request):
32753248
return {
@@ -3283,7 +3256,9 @@ class PowerConnectionsListView(generic.ObjectListView):
32833256
filterset_form = forms.PowerConnectionFilterForm
32843257
table = tables.PowerConnectionTable
32853258
template_name = 'dcim/connections_list.html'
3286-
actions = ('export',)
3259+
actions = {
3260+
'export': {'view'},
3261+
}
32873262

32883263
def get_extra_context(self, request):
32893264
return {
@@ -3297,7 +3272,9 @@ class InterfaceConnectionsListView(generic.ObjectListView):
32973272
filterset_form = forms.InterfaceConnectionFilterForm
32983273
table = tables.InterfaceConnectionTable
32993274
template_name = 'dcim/connections_list.html'
3300-
actions = ('export',)
3275+
actions = {
3276+
'export': {'view'},
3277+
}
33013278

33023279
def get_extra_context(self, request):
33033280
return {

netbox/extras/views.py

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
from extras.dashboard.forms import DashboardWidgetAddForm, DashboardWidgetForm
1717
from extras.dashboard.utils import get_widget_class
1818
from netbox.config import get_config, PARAMS
19+
from netbox.constants import DEFAULT_ACTION_PERMISSIONS
1920
from netbox.views import generic
2021
from utilities.forms import ConfirmationForm, get_field_value
2122
from utilities.htmx import is_htmx
@@ -210,7 +211,10 @@ class ExportTemplateListView(generic.ObjectListView):
210211
filterset_form = forms.ExportTemplateFilterForm
211212
table = tables.ExportTemplateTable
212213
template_name = 'extras/exporttemplate_list.html'
213-
actions = ('add', 'import', 'export', 'bulk_edit', 'bulk_delete', 'bulk_sync')
214+
actions = {
215+
**DEFAULT_ACTION_PERMISSIONS,
216+
'bulk_sync': {'sync'},
217+
}
214218

215219

216220
@register_model_view(ExportTemplate)
@@ -472,7 +476,12 @@ class ConfigContextListView(generic.ObjectListView):
472476
filterset_form = forms.ConfigContextFilterForm
473477
table = tables.ConfigContextTable
474478
template_name = 'extras/configcontext_list.html'
475-
actions = ('add', 'bulk_edit', 'bulk_delete', 'bulk_sync')
479+
actions = {
480+
'add': {'add'},
481+
'bulk_edit': {'change'},
482+
'bulk_delete': {'delete'},
483+
'bulk_sync': {'sync'},
484+
}
476485

477486

478487
@register_model_view(ConfigContext)
@@ -576,7 +585,10 @@ class ConfigTemplateListView(generic.ObjectListView):
576585
filterset_form = forms.ConfigTemplateFilterForm
577586
table = tables.ConfigTemplateTable
578587
template_name = 'extras/configtemplate_list.html'
579-
actions = ('add', 'import', 'export', 'bulk_edit', 'bulk_delete', 'bulk_sync')
588+
actions = {
589+
**DEFAULT_ACTION_PERMISSIONS,
590+
'bulk_sync': {'sync'},
591+
}
580592

581593

582594
@register_model_view(ConfigTemplate)
@@ -627,7 +639,9 @@ class ObjectChangeListView(generic.ObjectListView):
627639
filterset_form = forms.ObjectChangeFilterForm
628640
table = tables.ObjectChangeTable
629641
template_name = 'extras/objectchange_list.html'
630-
actions = ('export',)
642+
actions = {
643+
'export': {'view'},
644+
}
631645

632646

633647
@register_model_view(ObjectChange)
@@ -693,7 +707,9 @@ class ImageAttachmentListView(generic.ObjectListView):
693707
filterset = filtersets.ImageAttachmentFilterSet
694708
filterset_form = forms.ImageAttachmentFilterForm
695709
table = tables.ImageAttachmentTable
696-
actions = ('export',)
710+
actions = {
711+
'export': {'view'},
712+
}
697713

698714

699715
@register_model_view(ImageAttachment, 'edit')
@@ -736,7 +752,12 @@ class JournalEntryListView(generic.ObjectListView):
736752
filterset = filtersets.JournalEntryFilterSet
737753
filterset_form = forms.JournalEntryFilterForm
738754
table = tables.JournalEntryTable
739-
actions = ('import', 'export', 'bulk_edit', 'bulk_delete')
755+
actions = {
756+
'import': {'add'},
757+
'export': {'view'},
758+
'bulk_edit': {'change'},
759+
'bulk_delete': {'delete'},
760+
}
740761

741762

742763
@register_model_view(JournalEntry)

0 commit comments

Comments
 (0)