Browse Source

Restreint les champs possibles pour les users non cableurs

test_david
chirac 10 years ago
parent
commit
8833f5fe3b
  1. 12
      machines/forms.py
  2. 29
      machines/views.py
  3. 19
      users/models.py
  4. 7
      users/views.py

12
machines/forms.py

@ -17,6 +17,10 @@ class NewMachineForm(EditMachineForm):
class Meta(EditMachineForm.Meta): class Meta(EditMachineForm.Meta):
fields = ['type','name'] fields = ['type','name']
class BaseEditMachineForm(EditMachineForm):
class Meta(EditMachineForm.Meta):
fields = ['type','name','active']
class EditInterfaceForm(ModelForm): class EditInterfaceForm(ModelForm):
class Meta: class Meta:
model = Interface model = Interface
@ -39,6 +43,14 @@ class NewInterfaceForm(EditInterfaceForm):
class Meta(EditInterfaceForm.Meta): class Meta(EditInterfaceForm.Meta):
fields = ['mac_address','dns','details'] fields = ['mac_address','dns','details']
class BaseEditInterfaceForm(EditInterfaceForm):
class Meta(EditInterfaceForm.Meta):
fields = ['ipv4','mac_address','dns','details']
def __init__(self, *args, **kwargs):
super(BaseEditInterfaceForm, self).__init__(*args, **kwargs)
self.fields['ipv4'].empty_label = "Assignation automatique de l'ipv4"
class MachineTypeForm(ModelForm): class MachineTypeForm(ModelForm):
class Meta: class Meta:
model = MachineType model = MachineType

29
machines/views.py

@ -9,7 +9,7 @@ from django.contrib import messages
from django.contrib.auth.decorators import login_required, permission_required from django.contrib.auth.decorators import login_required, permission_required
from django.db.models import ProtectedError from django.db.models import ProtectedError
from .forms import NewMachineForm, EditMachineForm, EditInterfaceForm, AddInterfaceForm, NewInterfaceForm, MachineTypeForm, DelMachineTypeForm, ExtensionForm, DelExtensionForm from .forms import NewMachineForm, EditMachineForm, EditInterfaceForm, AddInterfaceForm, NewInterfaceForm, MachineTypeForm, DelMachineTypeForm, ExtensionForm, DelExtensionForm, BaseEditInterfaceForm, BaseEditMachineForm
from .models import Machine, Interface, IpList, MachineType, Extension from .models import Machine, Interface, IpList, MachineType, Extension
from users.models import User from users.models import User
@ -82,16 +82,20 @@ def edit_machine(request, interfaceid):
except Interface.DoesNotExist: except Interface.DoesNotExist:
messages.error(request, u"Interface inexistante" ) messages.error(request, u"Interface inexistante" )
return redirect("/machines") return redirect("/machines")
if not request.user.has_perms(('cableur',)) and str(interface.machine.user.id)!=str(request.user.id): if not request.user.has_perms(('cableur',)):
messages.error(request, "Vous ne pouvez pas éditer une machine d'un autre user que vous sans droit") if str(interface.machine.user.id)!=str(request.user.id):
return redirect("/users/profil/" + str(request.user.id)) messages.error(request, "Vous ne pouvez pas éditer une machine d'un autre user que vous sans droit")
machine_form = EditMachineForm(request.POST or None, instance=interface.machine) return redirect("/users/profil/" + str(request.user.id))
interface_form = EditInterfaceForm(request.POST or None, instance=interface) machine_form = BaseEditMachineForm(request.POST or None, instance=interface.machine)
interface_form = BaseEditInterfaceForm(request.POST or None, instance=interface)
else:
machine_form = EditMachineForm(request.POST or None, instance=interface.machine)
interface_form = EditInterfaceForm(request.POST or None, instance=interface)
if machine_form.is_valid() and interface_form.is_valid(): if machine_form.is_valid() and interface_form.is_valid():
machine_form.save() machine_form.save()
interface_form.save() interface_form.save()
messages.success(request, "La machine a été modifiée") messages.success(request, "La machine a été modifiée")
return redirect("/machines/") return redirect("/users/profil/" + str(interface.machine.user.id))
return form({'machineform': machine_form, 'interfaceform': interface_form}, 'machines/machine.html', request) return form({'machineform': machine_form, 'interfaceform': interface_form}, 'machines/machine.html', request)
@login_required @login_required
@ -101,11 +105,14 @@ def new_interface(request, machineid):
except Machine.DoesNotExist: except Machine.DoesNotExist:
messages.error(request, u"Machine inexistante" ) messages.error(request, u"Machine inexistante" )
return redirect("/machines") return redirect("/machines")
if not request.user.has_perms(('cableur',)) and str(machine.user.id)!=str(request.user.id): if not request.user.has_perms(('cableur',)):
messages.error(request, "Vous ne pouvez pas ajouter une interface à une machine d'un autre user que vous sans droit") if str(machine.user.id)!=str(request.user.id):
return redirect("/users/profil/" + str(request.user.id)) messages.error(request, "Vous ne pouvez pas ajouter une interface à une machine d'un autre user que vous sans droit")
return redirect("/users/profil/" + str(request.user.id))
machine_form = BaseEditMachineForm(request.POST or None, instance=machine)
else:
machine_form = EditMachineForm(request.POST or None, instance=machine)
interface_form = AddInterfaceForm(request.POST or None) interface_form = AddInterfaceForm(request.POST or None)
machine_form = EditMachineForm(request.POST or None, instance=machine)
if interface_form.is_valid() and machine_form.is_valid(): if interface_form.is_valid() and machine_form.is_valid():
machine_form.save() machine_form.save()
new_interface = interface_form.save(commit=False) new_interface = interface_form.save(commit=False)

19
users/models.py

@ -207,12 +207,9 @@ class Whitelist(models.Model):
def __str__(self): def __str__(self):
return str(self.user) + ' ' + str(self.raison) return str(self.user) + ' ' + str(self.raison)
class BaseInfoForm(ModelForm):
class InfoForm(ModelForm):
force = forms.BooleanField(label="Forcer le déménagement ?", initial=False, required=False)
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super(InfoForm, self).__init__(*args, **kwargs) super(BaseInfoForm, self).__init__(*args, **kwargs)
self.fields['name'].label = 'Nom' self.fields['name'].label = 'Nom'
self.fields['surname'].label = 'Prénom' self.fields['surname'].label = 'Prénom'
self.fields['school'].label = 'Établissement' self.fields['school'].label = 'Établissement'
@ -221,11 +218,6 @@ class InfoForm(ModelForm):
self.fields['room'].empty_label = "Pas de chambre" self.fields['room'].empty_label = "Pas de chambre"
self.fields['school'].empty_label = "Séléctionner un établissement" self.fields['school'].empty_label = "Séléctionner un établissement"
def clean_force(self):
if self.cleaned_data.get('force', False):
remove_user_room(self.cleaned_data.get('room'))
return
class Meta: class Meta:
model = User model = User
fields = [ fields = [
@ -238,6 +230,13 @@ class InfoForm(ModelForm):
'room', 'room',
] ]
class InfoForm(BaseInfoForm):
force = forms.BooleanField(label="Forcer le déménagement ?", initial=False, required=False)
def clean_force(self):
if self.cleaned_data.get('force', False):
remove_user_room(self.cleaned_data.get('room'))
return
class UserForm(InfoForm): class UserForm(InfoForm):
class Meta(InfoForm.Meta): class Meta(InfoForm.Meta):

7
users/views.py

@ -12,7 +12,7 @@ from django.utils import timezone
from users.models import User, Right, Ban, Whitelist, School from users.models import User, Right, Ban, Whitelist, School
from users.models import DelRightForm, BanForm, WhitelistForm, DelSchoolForm from users.models import DelRightForm, BanForm, WhitelistForm, DelSchoolForm
from users.models import InfoForm, StateForm, RightForm, SchoolForm from users.models import InfoForm, BaseInfoForm, StateForm, RightForm, SchoolForm
from cotisations.models import Facture from cotisations.models import Facture
from machines.models import Machine, Interface from machines.models import Machine, Interface
from users.forms import PassForm from users.forms import PassForm
@ -112,7 +112,10 @@ def edit_info(request, userid):
except User.DoesNotExist: except User.DoesNotExist:
messages.error(request, "Utilisateur inexistant") messages.error(request, "Utilisateur inexistant")
return redirect("/users/") return redirect("/users/")
user = InfoForm(request.POST or None, instance=user) if not request.user.has_perms(('cableur',)):
user = BaseInfoForm(request.POST or None, instance=user)
else:
user = InfoForm(request.POST or None, instance=user)
if user.is_valid(): if user.is_valid():
user.save() user.save()
messages.success(request, "L'user a bien été modifié") messages.success(request, "L'user a bien été modifié")

Loading…
Cancel
Save