implement the net detail view

This commit is contained in:
Andreas Zweili 2019-12-11 17:57:48 +01:00
parent a6984fd258
commit 0571f6863a
3 changed files with 26 additions and 8 deletions

View File

@ -1,6 +1,6 @@
from django.http import HttpResponseForbidden
from django.shortcuts import get_object_or_404
from .models import Computer, Customer, Device, ConnectedDevice
from .models import Computer, Customer, Device, ConnectedDevice, Net
def computer_view_permission(old_fuction):
@ -56,3 +56,17 @@ def customer_view_permission(old_function):
"You're not allowed to access this page."
)
return new_function
def net_view_permission(old_fuction):
def new_function(request, pk, *args, **kwargs):
net = get_object_or_404(Net, pk=pk)
customer = Customer.objects.get(pk=net.customer.pk)
user = request.user
if user.has_perm('inventory.view_customer', customer):
return old_fuction(request, pk)
else:
return HttpResponseForbidden(
"You're not allowed to access this device."
)
return new_function

View File

@ -13,19 +13,21 @@ pytestmark = pytest.mark.django_db
def test_net_detail_view_no_permission(create_admin_user):
create_admin_user()
net = mixer.blend('inventory.Net')
device = mixer.blend('inventory.Computer')
device_in_net = DeviceInNet.objects.create(device=device, net=net, ip='10.7.89.101')
customer = mixer.blend('inventory.Customer')
device = mixer.blend('inventory.Computer', customer=customer)
mixer.blend('inventory.DeviceInNet',
device=device,
net=net,
ip='10.7.89.101')
client = Client()
client.login(username="novartis-admin", password="password")
response = client.get('/net/' + str(net.id) + '/')
assert (response.status_code == 200
and helper.in_content(response, net.name)
and helper.not_in_content(response, device_in_net.ip))
assert (response.status_code == 403)
def test_net_detail_view(create_admin_user):
fixture = create_admin_user()
net = mixer.blend('inventory.Net')
net = mixer.blend('inventory.Net', customer=mixer.SELECT)
device = mixer.blend('inventory.Computer', customer=fixture['customer'])
device_in_net = DeviceInNet.objects.create(device=device,
net=net, ip='10.7.89.101')

View File

@ -11,7 +11,8 @@ from django_tables2.views import SingleTableMixin
from django_filters.views import FilterView
from .decorators import computer_view_permission, customer_view_permission
from .decorators import (computer_view_permission, customer_view_permission,
net_view_permission)
from .models import (Device, Computer, ComputerRamRelation,
ComputerDiskRelation, ComputerCpuRelation,
ComputerSoftwareRelation, Customer, Net, RaidInComputer,
@ -87,6 +88,7 @@ def nets_table_view(request, pk):
@login_required
@net_view_permission
def net_detail_view(request, pk):
net = get_object_or_404(Net, pk=pk)
table = NetDetailTable(DeviceInNet.objects.filter(net=net))