8
0
Fork 0
mirror of https://gitlab2.federez.net/re2o/re2o synced 2024-09-17 19:53:08 +00:00

Refactor des acl sur le views de topologie

This commit is contained in:
Gabriel Detraz 2017-12-09 05:49:29 +01:00 committed by root
parent 7485ac42ef
commit 17036f0073
2 changed files with 80 additions and 97 deletions

View file

@ -72,6 +72,11 @@ class Stack(models.Model):
return False, u"Vous n'avez pas le droit d'éditer des stack" return False, u"Vous n'avez pas le droit d'éditer des stack"
return True, None return True, None
def can_delete(self, user_request, *args, **kwargs):
if not user_request.has_perms(('infra',)):
return False, u"Vous n'avez pas le droit de supprimer une stack"
return True, None
def __str__(self): def __str__(self):
return " ".join([self.name, self.stack_id]) return " ".join([self.name, self.stack_id])
@ -138,6 +143,11 @@ class Switch(models.Model):
return False, u"Vous n'avez pas le droit d'éditer des switch" return False, u"Vous n'avez pas le droit d'éditer des switch"
return True, None return True, None
def can_delete(self, user_request, *args, **kwargs):
if not user_request.has_perms(('infra',)):
return False, u"Vous n'avez pas le droit de supprimer un switch"
return True, None
def __str__(self): def __str__(self):
return self.location + ' ' + str(self.switch_interface) return self.location + ' ' + str(self.switch_interface)
@ -203,6 +213,11 @@ class ModelSwitch(models.Model):
return False, u"Vous n'avez pas le droit d'éditer des modèle de switchs" return False, u"Vous n'avez pas le droit d'éditer des modèle de switchs"
return True, None return True, None
def can_delete(self, user_request, *args, **kwargs):
if not user_request.has_perms(('infra',)):
return False, u"Vous n'avez pas le droit de supprimer un modèle switch"
return True, None
def __str__(self): def __str__(self):
return str(self.constructor) + ' ' + self.reference return str(self.constructor) + ' ' + self.reference
@ -225,6 +240,11 @@ class ConstructorSwitch(models.Model):
constructeurs de switchs" constructeurs de switchs"
return True, None return True, None
def can_delete(self, user_request, *args, **kwargs):
if not user_request.has_perms(('infra',)):
return False, u"Vous n'avez pas le droit de supprimer un constructeur"
return True, None
def __str__(self): def __str__(self):
return self.name return self.name
@ -290,7 +310,13 @@ class Port(models.Model):
unique_together = ('switch', 'port') unique_together = ('switch', 'port')
def get_instance(port_id, *args, **kwargs): def get_instance(port_id, *args, **kwargs):
return Port.objects.get(pk=port_id) return Port.objects\
.select_related('switch__switch_interface__domain__extension')\
.select_related('machine_interface__domain__extension')\
.select_related('machine_interface__switch')\
.select_related('room')\
.select_related('related')\
.get(pk=port_id)
def can_create(user_request, *args, **kwargs): def can_create(user_request, *args, **kwargs):
return user_request.has_perms(('infra',)) , u"Vous n'avez pas le droit\ return user_request.has_perms(('infra',)) , u"Vous n'avez pas le droit\
@ -301,6 +327,11 @@ class Port(models.Model):
return False, u"Vous n'avez pas le droit d'éditer des ports" return False, u"Vous n'avez pas le droit d'éditer des ports"
return True, None return True, None
def can_delete(self, user_request, *args, **kwargs):
if not user_request.has_perms(('infra',)):
return False, u"Vous n'avez pas le droit de supprimer un port"
return True, None
def make_port_related(self): def make_port_related(self):
""" Synchronise le port distant sur self""" """ Synchronise le port distant sur self"""
related_port = self.related related_port = self.related
@ -367,6 +398,11 @@ class Room(models.Model):
return False, u"Vous n'avez pas le droit d'éditer une chambre" return False, u"Vous n'avez pas le droit d'éditer une chambre"
return True, None return True, None
def can_delete(self, user_request, *args, **kwargs):
if not user_request.has_perms(('infra',)):
return False, u"Vous n'avez pas le droit de supprimer une chambre"
return True, None
def __str__(self): def __str__(self):
return self.name return self.name

View file

@ -65,7 +65,13 @@ from topologie.forms import (
CreatePortsForm CreatePortsForm
) )
from users.views import form from users.views import form
from re2o.utils import SortTable from re2o.utils import (
SortTable,
can_create,
can_edit,
can_delete,
can_view
)
from machines.forms import ( from machines.forms import (
DomainForm, DomainForm,
NewMachineForm, NewMachineForm,
@ -271,7 +277,7 @@ def index_model_switch(request):
@login_required @login_required
@permission_required('infra') @can_create(Port)
def new_port(request, switch_id): def new_port(request, switch_id):
""" Nouveau port""" """ Nouveau port"""
try: try:
@ -299,21 +305,11 @@ def new_port(request, switch_id):
@login_required @login_required
@permission_required('infra') @can_edit(Port)
def edit_port(request, port_id): def edit_port(request, port_object, port_id):
""" Edition d'un port. Permet de changer le switch parent et """ Edition d'un port. Permet de changer le switch parent et
l'affectation du port""" l'affectation du port"""
try:
port_object = Port.objects\
.select_related('switch__switch_interface__domain__extension')\
.select_related('machine_interface__domain__extension')\
.select_related('machine_interface__switch')\
.select_related('room')\
.select_related('related')\
.get(pk=port_id)
except Port.DoesNotExist:
messages.error(request, u"Port inexistant")
return redirect(reverse('topologie:index'))
port = EditPortForm(request.POST or None, instance=port_object) port = EditPortForm(request.POST or None, instance=port_object)
if port.is_valid(): if port.is_valid():
with transaction.atomic(), reversion.create_revision(): with transaction.atomic(), reversion.create_revision():
@ -331,14 +327,9 @@ def edit_port(request, port_id):
@login_required @login_required
@permission_required('infra') @can_delete(Port)
def del_port(request, port_id): def del_port(request, port, port_id):
""" Supprime le port""" """ Supprime le port"""
try:
port = Port.objects.get(pk=port_id)
except Port.DoesNotExist:
messages.error(request, u"Port inexistant")
return redirect(reverse('topologie:index'))
if request.method == "POST": if request.method == "POST":
try: try:
with transaction.atomic(), reversion.create_revision(): with transaction.atomic(), reversion.create_revision():
@ -357,7 +348,7 @@ def del_port(request, port_id):
@login_required @login_required
@permission_required('infra') @can_create(Stack)
def new_stack(request): def new_stack(request):
"""Ajoute un nouveau stack : stack_id_min, max, et nombre de switches""" """Ajoute un nouveau stack : stack_id_min, max, et nombre de switches"""
stack = StackForm(request.POST or None) stack = StackForm(request.POST or None)
@ -371,14 +362,10 @@ def new_stack(request):
@login_required @login_required
@permission_required('infra') @can_edit(Stack)
def edit_stack(request, stack_id): def edit_stack(request, stack, stack_id):
"""Edition d'un stack (nombre de switches, nom...)""" """Edition d'un stack (nombre de switches, nom...)"""
try:
stack = Stack.objects.get(pk=stack_id)
except Stack.DoesNotExist:
messages.error(request, u"Stack inexistante")
return redirect(reverse('topologie:index-stack'))
stack = StackForm(request.POST or None, instance=stack) stack = StackForm(request.POST or None, instance=stack)
if stack.is_valid(): if stack.is_valid():
with transaction.atomic(), reversion.create_revision(): with transaction.atomic(), reversion.create_revision():
@ -394,14 +381,9 @@ def edit_stack(request, stack_id):
@login_required @login_required
@permission_required('infra') @can_delete(Stack)
def del_stack(request, stack_id): def del_stack(request, stack, stack_id):
"""Supprime un stack""" """Supprime un stack"""
try:
stack = Stack.objects.get(pk=stack_id)
except Stack.DoesNotExist:
messages.error(request, u"Stack inexistante")
return redirect(reverse('topologie:index-stack'))
if request.method == "POST": if request.method == "POST":
try: try:
with transaction.atomic(), reversion.create_revision(): with transaction.atomic(), reversion.create_revision():
@ -417,14 +399,10 @@ def del_stack(request, stack_id):
@login_required @login_required
@permission_required('infra') @can_edit(Stack)
def edit_switchs_stack(request, stack_id): def edit_switchs_stack(request, stack, stack_id):
"""Permet d'éditer la liste des switches dans une stack et l'ajouter""" """Permet d'éditer la liste des switches dans une stack et l'ajouter"""
try:
stack = Stack.objects.get(pk=stack_id)
except Stack.DoesNotExist:
messages.error(request, u"Stack inexistante")
return redirect(reverse('topologie:index-stack'))
if request.method == "POST": if request.method == "POST":
pass pass
else: else:
@ -434,7 +412,7 @@ def edit_switchs_stack(request, stack_id):
@login_required @login_required
@permission_required('infra') @can_create(Switch)
def new_switch(request): def new_switch(request):
""" Creation d'un switch. Cree en meme temps l'interface et la machine """ Creation d'un switch. Cree en meme temps l'interface et la machine
associée. Vue complexe. Appelle successivement les 4 models forms associée. Vue complexe. Appelle successivement les 4 models forms
@ -492,7 +470,7 @@ def new_switch(request):
@login_required @login_required
@permission_required('infra') @can_create(Port)
def create_ports(request, switch_id): def create_ports(request, switch_id):
""" Création d'une liste de ports pour un switch.""" """ Création d'une liste de ports pour un switch."""
try: try:
@ -528,15 +506,11 @@ def create_ports(request, switch_id):
@login_required @login_required
@permission_required('infra') @can_edit(Switch)
def edit_switch(request, switch_id): def edit_switch(request, switch, switch_id):
""" Edition d'un switch. Permet de chambre nombre de ports, """ Edition d'un switch. Permet de chambre nombre de ports,
place dans le stack, interface et machine associée""" place dans le stack, interface et machine associée"""
try:
switch = Switch.objects.get(pk=switch_id)
except Switch.DoesNotExist:
messages.error(request, u"Switch inexistant")
return redirect(reverse('topologie:index'))
switch_form = EditSwitchForm(request.POST or None, instance=switch) switch_form = EditSwitchForm(request.POST or None, instance=switch)
machine_form = EditMachineForm( machine_form = EditMachineForm(
request.POST or None, request.POST or None,
@ -596,7 +570,7 @@ def edit_switch(request, switch_id):
@login_required @login_required
@permission_required('infra') @can_create(Room)
def new_room(request): def new_room(request):
"""Nouvelle chambre """ """Nouvelle chambre """
room = EditRoomForm(request.POST or None) room = EditRoomForm(request.POST or None)
@ -611,14 +585,10 @@ def new_room(request):
@login_required @login_required
@permission_required('infra') @can_edit(Room)
def edit_room(request, room_id): def edit_room(request, room, room_id):
""" Edition numero et details de la chambre""" """ Edition numero et details de la chambre"""
try:
room = Room.objects.get(pk=room_id)
except Room.DoesNotExist:
messages.error(request, u"Chambre inexistante")
return redirect(reverse('topologie:index-room'))
room = EditRoomForm(request.POST or None, instance=room) room = EditRoomForm(request.POST or None, instance=room)
if room.is_valid(): if room.is_valid():
with transaction.atomic(), reversion.create_revision(): with transaction.atomic(), reversion.create_revision():
@ -633,14 +603,9 @@ def edit_room(request, room_id):
@login_required @login_required
@permission_required('infra') @can_delete(Room)
def del_room(request, room_id): def del_room(request, room, room_id):
""" Suppression d'un chambre""" """ Suppression d'un chambre"""
try:
room = Room.objects.get(pk=room_id)
except Room.DoesNotExist:
messages.error(request, u"Chambre inexistante")
return redirect(reverse('topologie:index-room'))
if request.method == "POST": if request.method == "POST":
try: try:
with transaction.atomic(), reversion.create_revision(): with transaction.atomic(), reversion.create_revision():
@ -659,7 +624,7 @@ def del_room(request, room_id):
@login_required @login_required
@permission_required('infra') @can_create(ModelSwitch)
def new_model_switch(request): def new_model_switch(request):
"""Nouveau modèle de switch""" """Nouveau modèle de switch"""
model_switch = EditModelSwitchForm(request.POST or None) model_switch = EditModelSwitchForm(request.POST or None)
@ -674,14 +639,10 @@ def new_model_switch(request):
@login_required @login_required
@permission_required('infra') @can_edit(ModelSwitch)
def edit_model_switch(request, model_switch_id): def edit_model_switch(request, model_switch, model_switch_id):
""" Edition d'un modèle de switch""" """ Edition d'un modèle de switch"""
try:
model_switch = ModelSwitch.objects.get(pk=model_switch_id)
except ModelSwitch.DoesNotExist:
messages.error(request, u"Modèle inconnu")
return redirect("/topologie/index_model_switch/")
model_switch = EditModelSwitchForm(request.POST or None, instance=model_switch) model_switch = EditModelSwitchForm(request.POST or None, instance=model_switch)
if model_switch.is_valid(): if model_switch.is_valid():
with transaction.atomic(), reversion.create_revision(): with transaction.atomic(), reversion.create_revision():
@ -696,14 +657,9 @@ def edit_model_switch(request, model_switch_id):
@login_required @login_required
@permission_required('infra') @can_delete(ModelSwitch)
def del_model_switch(request, model_switch_id): def del_model_switch(request, model_switch_id):
""" Suppression d'un modèle de switch""" """ Suppression d'un modèle de switch"""
try:
model_switch = ModelSwitch.objects.get(pk=model_switch_id)
except ModelSwitch.DoesNotExist:
messages.error(request, u"Modèle inexistant")
return redirect("/topologie/index_model_switch/")
if request.method == "POST": if request.method == "POST":
try: try:
with transaction.atomic(), reversion.create_revision(): with transaction.atomic(), reversion.create_revision():
@ -722,7 +678,7 @@ def del_model_switch(request, model_switch_id):
@login_required @login_required
@permission_required('infra') @can_create(ConstructorSwitch)
def new_constructor_switch(request): def new_constructor_switch(request):
"""Nouveau constructeur de switch""" """Nouveau constructeur de switch"""
constructor_switch = EditConstructorSwitchForm(request.POST or None) constructor_switch = EditConstructorSwitchForm(request.POST or None)
@ -737,14 +693,10 @@ def new_constructor_switch(request):
@login_required @login_required
@permission_required('infra') @can_edit(ConstructorSwitch)
def edit_constructor_switch(request, constructor_switch_id): def edit_constructor_switch(request, constructor_switch, constructor_switch_id):
""" Edition d'un constructeur de switch""" """ Edition d'un constructeur de switch"""
try:
constructor_switch = ConstructorSwitch.objects.get(pk=constructor_switch_id)
except ConstructorSwitch.DoesNotExist:
messages.error(request, u"Constructeur inconnu")
return redirect("/topologie/index_model_switch/")
constructor_switch = EditConstructorSwitchForm(request.POST or None, instance=constructor_switch) constructor_switch = EditConstructorSwitchForm(request.POST or None, instance=constructor_switch)
if constructor_switch.is_valid(): if constructor_switch.is_valid():
with transaction.atomic(), reversion.create_revision(): with transaction.atomic(), reversion.create_revision():
@ -759,14 +711,9 @@ def edit_constructor_switch(request, constructor_switch_id):
@login_required @login_required
@permission_required('infra') @can_delete(ConstructorSwitch)
def del_constructor_switch(request, constructor_switch_id): def del_constructor_switch(request, constructor_switch_id):
""" Suppression d'un constructeur de switch""" """ Suppression d'un constructeur de switch"""
try:
constructor_switch = ConstructorSwitch.objects.get(pk=constructor_switch_id)
except ConstructorSwitch.DoesNotExist:
messages.error(request, u"Constructeur inexistant")
return redirect("/topologie/index_model_switch/")
if request.method == "POST": if request.method == "POST":
try: try:
with transaction.atomic(), reversion.create_revision(): with transaction.atomic(), reversion.create_revision():