diff --git a/netbox_access_lists/models.py b/netbox_access_lists/models.py index 4bd64c4..6373591 100644 --- a/netbox_access_lists/models.py +++ b/netbox_access_lists/models.py @@ -1,5 +1,6 @@ from django.contrib.postgres.fields import ArrayField from django.db import models +from django.urls import reverse from netbox.models import NetBoxModel from utilities.choices import ChoiceSet @@ -42,6 +43,10 @@ class AccessList(NetBoxModel): def __str__(self): return self.name + def get_absolute_url(self): + return reverse('plugins:netbox_access_lists:accesslist', args=[self.pk]) + + class AccessListRule(NetBoxModel): access_list = models.ForeignKey( to=AccessList, @@ -94,3 +99,6 @@ class AccessListRule(NetBoxModel): def __str__(self): return f'{self.access_list}: Rule {self.index}' + def get_absolute_url(self): + return reverse('plugins:netbox_access_lists:accesslistrule', args=[self.pk]) + diff --git a/netbox_access_lists/urls.py b/netbox_access_lists/urls.py new file mode 100644 index 0000000..c74b02c --- /dev/null +++ b/netbox_access_lists/urls.py @@ -0,0 +1,30 @@ +from django.urls import path + +from netbox.views.generic import ObjectChangeLogView +from . import models, views + + +urlpatterns = ( + + # Access lists + path('access-lists/', views.AccessListListView.as_view(), name='accesslist_list'), + path('access-lists/add/', views.AccessListEditView.as_view(), name='accesslist_add'), + path('access-lists//', views.AccessListView.as_view(), name='accesslist'), + path('access-lists//edit/', views.AccessListEditView.as_view(), name='accesslist_edit'), + path('access-lists//delete/', views.AccessListDeleteView.as_view(), name='accesslist_delete'), + path('access-lists//changelog/', ObjectChangeLogView.as_view(), name='accesslist_changelog', kwargs={ + 'model': models.AccessList + }), + + # Access list rules + path('rules/', views.AccessListRuleListView.as_view(), name='accesslistrule_list'), + path('rules/add/', views.AccessListRuleEditView.as_view(), name='accesslistrule_add'), + path('rules//', views.AccessListRuleView.as_view(), name='accesslistrule'), + path('rules//edit/', views.AccessListRuleEditView.as_view(), name='accesslistrule_edit'), + path('rules//delete/', views.AccessListRuleDeleteView.as_view(), name='accesslistrule_delete'), + path('rules//changelog/', ObjectChangeLogView.as_view(), name='accesslistrule_changelog', kwargs={ + 'model': models.AccessListRule + }), + +) + diff --git a/netbox_access_lists/views.py b/netbox_access_lists/views.py new file mode 100644 index 0000000..0f7f134 --- /dev/null +++ b/netbox_access_lists/views.py @@ -0,0 +1,52 @@ +from django.db.models import Count + +from netbox.views import generic +from . import forms, models, tables + + +# +# Access lists +# + +class AccessListView(generic.ObjectView): + queryset = models.AccessList.objects.all() + + +class AccessListListView(generic.ObjectListView): + queryset = models.AccessList.objects.annotate( + rule_count=Count('rules') + ) + table = tables.AccessListTable + + +class AccessListEditView(generic.ObjectEditView): + queryset = models.AccessList.objects.all() + model_form = forms.AccessListForm + + +class AccessListDeleteView(generic.ObjectDeleteView): + queryset = models.AccessList.objects.all() + + +# +# Access list rules +# + +class AccessListRuleView(generic.ObjectView): + queryset = models.AccessListRule.objects.all() + + +class AccessListRuleListView(generic.ObjectListView): + queryset = models.AccessListRule.objects.all() + table = tables.AccessListRuleTable + + +class AccessListRuleEditView(generic.ObjectEditView): + queryset = models.AccessListRule.objects.all() + model_form = forms.AccessListRuleForm + + +class AccessListRuleDeleteView(generic.ObjectDeleteView): + queryset = models.AccessListRule.objects.all() + +