8
0
Fork 0
mirror of https://gitlab2.federez.net/re2o/re2o synced 2024-12-25 00:13:45 +00:00

Applique nouveau système acl sur machines

This commit is contained in:
Gabriel Detraz 2017-12-31 19:47:22 +01:00 committed by root
parent 88d336816e
commit d7ab3e7291
2 changed files with 255 additions and 94 deletions

View file

@ -0,0 +1,79 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.10.7 on 2017-12-31 18:47
from __future__ import unicode_literals
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('machines', '0069_auto_20171116_0822'),
]
operations = [
migrations.AlterModelOptions(
name='domain',
options={'permissions': (('view_domain', 'Peut voir un objet domain'),)},
),
migrations.AlterModelOptions(
name='extension',
options={'permissions': (('view_extension', 'Peut voir un objet extension'), ('use_all_extension', 'Peut utiliser toutes les extension'))},
),
migrations.AlterModelOptions(
name='interface',
options={'permissions': (('view_interface', 'Peut voir un objet interface'),)},
),
migrations.AlterModelOptions(
name='iplist',
options={'permissions': (('view_iplist', 'Peut voir un objet iplist'),)},
),
migrations.AlterModelOptions(
name='iptype',
options={'permissions': (('view_iptype', 'Peut voir un objet iptype'), ('use_all_iptype', 'Peut utiliser tous les iptype'))},
),
migrations.AlterModelOptions(
name='machine',
options={'permissions': (('view_machine', 'Peut voir un objet machine quelquonque'), ('change_machine_user', "Peut changer le propriétaire d'une machine"))},
),
migrations.AlterModelOptions(
name='machinetype',
options={'permissions': (('view_machinetype', 'Peut voir un objet machinetype'), ('use_all_machinetype', "Peut utiliser n'importe quel type de machine"))},
),
migrations.AlterModelOptions(
name='mx',
options={'permissions': (('view_mx', 'Peut voir un objet mx'),)},
),
migrations.AlterModelOptions(
name='nas',
options={'permissions': (('view_nas', 'Peut voir un objet Nas'),)},
),
migrations.AlterModelOptions(
name='ns',
options={'permissions': (('view_nx', 'Peut voir un objet nx'),)},
),
migrations.AlterModelOptions(
name='ouvertureportlist',
options={'permissions': (('view_ouvertureportlist', 'Peut voir un objet ouvertureport'),)},
),
migrations.AlterModelOptions(
name='service',
options={'permissions': (('view_service', 'Peut voir un objet service'),)},
),
migrations.AlterModelOptions(
name='soa',
options={'permissions': (('view_soa', 'Peut voir un objet soa'),)},
),
migrations.AlterModelOptions(
name='srv',
options={'permissions': (('view_soa', 'Peut voir un objet soa'),)},
),
migrations.AlterModelOptions(
name='txt',
options={'permissions': (('view_txt', 'Peut voir un objet txt'),)},
),
migrations.AlterModelOptions(
name='vlan',
options={'permissions': (('view_vlan', 'Peut voir un objet vlan'),)},
),
]

View file

@ -57,6 +57,12 @@ class Machine(FieldPermissionModelMixin, models.Model):
) )
active = models.BooleanField(default=True) active = models.BooleanField(default=True)
class Meta:
permissions = (
("view_machine", "Peut voir un objet machine quelquonque"),
("change_machine_user", "Peut changer le propriétaire d'une machine"),
)
def get_instance(machineid, *args, **kwargs): def get_instance(machineid, *args, **kwargs):
"""Récupère une instance """Récupère une instance
:param machineid: Instance id à trouver :param machineid: Instance id à trouver
@ -75,7 +81,7 @@ class Machine(FieldPermissionModelMixin, models.Model):
A tuple with a boolean stating if edition is allowed and an A tuple with a boolean stating if edition is allowed and an
explanation message. explanation message.
""" """
return user_request.has_perms(('infra',)), "Vous ne pouvez pas \ return user_request.has_perm('machines.change_machine_user'), "Vous ne pouvez pas \
modifier l'utilisateur de la machine." modifier l'utilisateur de la machine."
def can_create(user_request, userid, *args, **kwargs): def can_create(user_request, userid, *args, **kwargs):
@ -90,7 +96,7 @@ class Machine(FieldPermissionModelMixin, models.Model):
return False, u"Utilisateur inexistant" return False, u"Utilisateur inexistant"
options, created = preferences.models.OptionalMachine.objects.get_or_create() options, created = preferences.models.OptionalMachine.objects.get_or_create()
max_lambdauser_interfaces = options.max_lambdauser_interfaces max_lambdauser_interfaces = options.max_lambdauser_interfaces
if not user_request.has_perms(('cableur',)): if not user_request.has_perm('machines.add_machine'):
if user != user_request: if user != user_request:
return False, u"Vous ne pouvez pas ajouter une machine à un\ return False, u"Vous ne pouvez pas ajouter une machine à un\
autre user que vous sans droit" autre user que vous sans droit"
@ -106,7 +112,7 @@ class Machine(FieldPermissionModelMixin, models.Model):
:param self: instance machine à éditer :param self: instance machine à éditer
:param user_request: instance user qui fait l'edition :param user_request: instance user qui fait l'edition
:return: True ou False avec la raison le cas échéant""" :return: True ou False avec la raison le cas échéant"""
if not user_request.has_perms(('cableur',)) and self.user != user_request: if not user_request.has_perm('machines.change_machine') and self.user != user_request:
return False, u"Vous ne pouvez pas éditer une machine d'un autre user\ return False, u"Vous ne pouvez pas éditer une machine d'un autre user\
que vous sans droit" que vous sans droit"
return True, None return True, None
@ -117,7 +123,7 @@ class Machine(FieldPermissionModelMixin, models.Model):
:param self: instance machine à supprimer :param self: instance machine à supprimer
:param user_request: instance user qui fait l'edition :param user_request: instance user qui fait l'edition
:return: True ou False avec la raison de l'échec le cas échéant""" :return: True ou False avec la raison de l'échec le cas échéant"""
if not user_request.has_perms(('cableur',)) and self.user != user_request: if not user_request.has_perm('machines.delete_machine') and self.user != user_request:
return False, u"Vous ne pouvez pas éditer une machine d'un autre user\ return False, u"Vous ne pouvez pas éditer une machine d'un autre user\
que vous sans droit" que vous sans droit"
return True, None return True, None
@ -127,7 +133,7 @@ class Machine(FieldPermissionModelMixin, models.Model):
droit particulier correspondant droit particulier correspondant
:param user_request: instance user qui fait l'edition :param user_request: instance user qui fait l'edition
:return: True ou False avec la raison de l'échec le cas échéant""" :return: True ou False avec la raison de l'échec le cas échéant"""
if not user_request.has_perms(('cableur',)): if not user_request.has_perm('machines.view_machine'):
return False, u"Vous ne pouvez pas afficher l'ensemble des machines sans permission" return False, u"Vous ne pouvez pas afficher l'ensemble des machines sans permission"
return True, None return True, None
@ -137,7 +143,7 @@ class Machine(FieldPermissionModelMixin, models.Model):
:param self: instance machine à éditer :param self: instance machine à éditer
:param user_request: instance user qui fait l'edition :param user_request: instance user qui fait l'edition
:return: True ou False avec la raison de l'échec le cas échéant""" :return: True ou False avec la raison de l'échec le cas échéant"""
if not user_request.has_perms(('cableur',)) and self.user != user_request: if not user_request.has_perm('machines.view_machine') and self.user != user_request:
return False, u"Vous n'avez pas droit de voir les machines autre\ return False, u"Vous n'avez pas droit de voir les machines autre\
que les vôtres" que les vôtres"
return True, None return True, None
@ -158,6 +164,12 @@ class MachineType(models.Model):
null=True null=True
) )
class Meta:
permissions = (
("view_machinetype", "Peut voir un objet machinetype"),
("use_all_machinetype", "Peut utiliser n'importe quel type de machine"),
)
def all_interfaces(self): def all_interfaces(self):
""" Renvoie toutes les interfaces (cartes réseaux) de type """ Renvoie toutes les interfaces (cartes réseaux) de type
machinetype""" machinetype"""
@ -174,7 +186,7 @@ class MachineType(models.Model):
un type de machine un type de machine
:param user_request: Utilisateur qui fait la requête :param user_request: Utilisateur qui fait la requête
:return: soit True, soit False avec la raison de l'échec""" :return: soit True, soit False avec la raison de l'échec"""
return user_request.has_perms(('infra',)), u"Vous n'avez pas le droit\ return user_request.has_perm('machines.add_machinetype'), u"Vous n'avez pas le droit\
de créer un type de machine" de créer un type de machine"
def can_edit(self, user_request, *args, **kwargs): def can_edit(self, user_request, *args, **kwargs):
@ -183,7 +195,7 @@ class MachineType(models.Model):
:param self: Instance machinetype à editer :param self: Instance machinetype à editer
:param user_request: Utilisateur qui fait la requête :param user_request: Utilisateur qui fait la requête
:return: soit True, soit False avec la raison de l'échec""" :return: soit True, soit False avec la raison de l'échec"""
if not user_request.has_perms(('infra',)): if not user_request.has_perm('machines.change_machinetype'):
return False, u"Vous n'avez pas le droit d'éditer des types de machine" return False, u"Vous n'avez pas le droit d'éditer des types de machine"
return True, None return True, None
@ -193,7 +205,7 @@ class MachineType(models.Model):
:param self: instance machinetype à supprimer :param self: instance machinetype à supprimer
:param user_request: instance user qui fait l'edition :param user_request: instance user qui fait l'edition
:return: True ou False avec la raison de l'échec le cas échéant""" :return: True ou False avec la raison de l'échec le cas échéant"""
if not user_request.has_perms(('infra',)): if not user_request.has_perm('machines.delete_machinetype'):
return False, u"Vous n'avez pas le droit de supprimer des types de machines" return False, u"Vous n'avez pas le droit de supprimer des types de machines"
return True, None return True, None
@ -206,7 +218,7 @@ class MachineType(models.Model):
A tuple with a boolean stating if user can acces and an explanation A tuple with a boolean stating if user can acces and an explanation
message is acces is not allowed. message is acces is not allowed.
""" """
if not user_request.has_perms(('infra',)): if not user_request.has_perm('machines.use_all_machinetype'):
return False, u"Vous n'avez pas le droit d'utiliser tout types de machines" return False, u"Vous n'avez pas le droit d'utiliser tout types de machines"
return True, None return True, None
@ -215,7 +227,7 @@ class MachineType(models.Model):
droit particulier correspondant droit particulier correspondant
:param user_request: instance user qui fait l'edition :param user_request: instance user qui fait l'edition
:return: True ou False avec la raison de l'échec le cas échéant""" :return: True ou False avec la raison de l'échec le cas échéant"""
return user_request.has_perms(('cableur',)), u"Vous n'avez pas le droit\ return user_request.has_perm('machines.view_machinetype'), u"Vous n'avez pas le droit\
de voir les types de machines" de voir les types de machines"
def can_view(self, user_request, *args, **kwargs): def can_view(self, user_request, *args, **kwargs):
@ -224,7 +236,7 @@ class MachineType(models.Model):
:param self: instance machinetype à voir :param self: instance machinetype à voir
:param user_request: instance user qui fait l'edition :param user_request: instance user qui fait l'edition
:return: True ou False avec la raison de l'échec le cas échéant""" :return: True ou False avec la raison de l'échec le cas échéant"""
return user_request.has_perms(('cableur',)), u"Vous n'avez pas le droit\ return user_request.has_perm('machines.view_machinetype'), u"Vous n'avez pas le droit\
de voir les types de machines" de voir les types de machines"
def __str__(self): def __str__(self):
@ -257,6 +269,12 @@ class IpType(models.Model):
null=True null=True
) )
class Meta:
permissions = (
("view_iptype", "Peut voir un objet iptype"),
("use_all_iptype", "Peut utiliser tous les iptype"),
)
@cached_property @cached_property
def ip_range(self): def ip_range(self):
""" Renvoie un objet IPRange à partir de l'objet IpType""" """ Renvoie un objet IPRange à partir de l'objet IpType"""
@ -347,7 +365,7 @@ class IpType(models.Model):
"""Superdroit qui permet d'utiliser toutes les extensions sans restrictions """Superdroit qui permet d'utiliser toutes les extensions sans restrictions
:param user_request: instance user qui fait l'edition :param user_request: instance user qui fait l'edition
:return: True ou False avec la raison de l'échec le cas échéant""" :return: True ou False avec la raison de l'échec le cas échéant"""
return user_request.has_perms(('infra',)), None return user_request.has_perm('machines.use_all_iptype'), None
def can_create(user_request, *args, **kwargs): def can_create(user_request, *args, **kwargs):
@ -355,7 +373,7 @@ class IpType(models.Model):
un type d'ip un type d'ip
:param user_request: Utilisateur qui fait la requête :param user_request: Utilisateur qui fait la requête
:return: soit True, soit False avec la raison de l'échec""" :return: soit True, soit False avec la raison de l'échec"""
return user_request.has_perms(('infra',)), u"Vous n'avez pas le droit\ return user_request.has_perm('machines.add_iptype'), u"Vous n'avez pas le droit\
de créer un type d'ip" de créer un type d'ip"
def can_edit(self, user_request, *args, **kwargs): def can_edit(self, user_request, *args, **kwargs):
@ -364,7 +382,7 @@ class IpType(models.Model):
:param self: Instance iptype à editer :param self: Instance iptype à editer
:param user_request: Utilisateur qui fait la requête :param user_request: Utilisateur qui fait la requête
:return: soit True, soit False avec la raison de l'échec""" :return: soit True, soit False avec la raison de l'échec"""
if not user_request.has_perms(('infra',)): if not user_request.has_perm('machines.change_iptype'):
return False, u"Vous n'avez pas le droit d'éditer des types d'ip" return False, u"Vous n'avez pas le droit d'éditer des types d'ip"
return True, None return True, None
@ -374,7 +392,7 @@ class IpType(models.Model):
:param self: Instance iptype à delete :param self: Instance iptype à delete
:param user_request: Utilisateur qui fait la requête :param user_request: Utilisateur qui fait la requête
:return: soit True, soit False avec la raison de l'échec""" :return: soit True, soit False avec la raison de l'échec"""
return user_request.has_perms(('infra',)), u"Vous n'avez pas le droit\ return user_request.has_perm('machines.delete_iptype'), u"Vous n'avez pas le droit\
de supprimer un type d'ip" de supprimer un type d'ip"
def can_view_all(user_request, *args, **kwargs): def can_view_all(user_request, *args, **kwargs):
@ -382,7 +400,7 @@ class IpType(models.Model):
droit particulier cableur correspondant droit particulier cableur correspondant
:param user_request: instance user qui fait l'edition :param user_request: instance user qui fait l'edition
:return: True ou False avec la raison de l'échec le cas échéant""" :return: True ou False avec la raison de l'échec le cas échéant"""
return user_request.has_perms(('cableur',)), u"Vous n'avez pas le droit\ return user_request.has_perm('machines.view_iptype'), u"Vous n'avez pas le droit\
de voir les types d'ip" de voir les types d'ip"
def can_view(self, user_request, *args, **kwargs): def can_view(self, user_request, *args, **kwargs):
@ -391,7 +409,7 @@ class IpType(models.Model):
:param self: instance iptype à voir :param self: instance iptype à voir
:param user_request: instance user qui fait l'edition :param user_request: instance user qui fait l'edition
:return: True ou False avec la raison de l'échec le cas échéant""" :return: True ou False avec la raison de l'échec le cas échéant"""
return user_request.has_perms(('cableur',)), u"Vous n'avez pas le droit\ return user_request.has_perm('machines.view_iptype'), u"Vous n'avez pas le droit\
de voir les types d'ip" de voir les types d'ip"
def __str__(self): def __str__(self):
@ -407,6 +425,11 @@ class Vlan(models.Model):
name = models.CharField(max_length=256) name = models.CharField(max_length=256)
comment = models.CharField(max_length=256, blank=True) comment = models.CharField(max_length=256, blank=True)
class Meta:
permissions = (
("view_vlan", "Peut voir un objet vlan"),
)
def get_instance(vlanid, *args, **kwargs): def get_instance(vlanid, *args, **kwargs):
"""Récupère une instance """Récupère une instance
:param vlanid: Instance id à trouver :param vlanid: Instance id à trouver
@ -418,7 +441,7 @@ class Vlan(models.Model):
un vlan un vlan
:param user_request: Utilisateur qui fait la requête :param user_request: Utilisateur qui fait la requête
:return: soit True, soit False avec la raison de l'échec""" :return: soit True, soit False avec la raison de l'échec"""
return user_request.has_perms(('infra',)), u"Vous n'avez pas le droit\ return user_request.has_perm('machines.add_vlan'), u"Vous n'avez pas le droit\
de créer un vlan" de créer un vlan"
def can_edit(self, user_request, *args, **kwargs): def can_edit(self, user_request, *args, **kwargs):
@ -427,7 +450,7 @@ class Vlan(models.Model):
:param self: Instance vlan à editer :param self: Instance vlan à editer
:param user_request: Utilisateur qui fait la requête :param user_request: Utilisateur qui fait la requête
:return: soit True, soit False avec la raison de l'échec""" :return: soit True, soit False avec la raison de l'échec"""
if not user_request.has_perms(('infra',)): if not user_request.has_perm('machines.change_vlan'):
return False, u"Vous n'avez pas le droit d'éditer des vlans" return False, u"Vous n'avez pas le droit d'éditer des vlans"
return True, None return True, None
@ -437,7 +460,7 @@ class Vlan(models.Model):
:param self: Instance vlan à delete :param self: Instance vlan à delete
:param user_request: Utilisateur qui fait la requête :param user_request: Utilisateur qui fait la requête
:return: soit True, soit False avec la raison de l'échec""" :return: soit True, soit False avec la raison de l'échec"""
return user_request.has_perms(('infra',)), u"Vous n'avez pas le droit\ return user_request.has_perm('machines.delete_vlan'), u"Vous n'avez pas le droit\
de suprimer un vlan" de suprimer un vlan"
def can_view_all(user_request, *args, **kwargs): def can_view_all(user_request, *args, **kwargs):
@ -445,7 +468,7 @@ class Vlan(models.Model):
droit particulier cableur correspondant droit particulier cableur correspondant
:param user_request: instance user qui fait l'edition :param user_request: instance user qui fait l'edition
:return: True ou False avec la raison de l'échec le cas échéant""" :return: True ou False avec la raison de l'échec le cas échéant"""
return user_request.has_perms(('cableur',)), u"Vous n'avez pas le droit\ return user_request.has_perm('machines.view_vlan'), u"Vous n'avez pas le droit\
de voir les vlans" de voir les vlans"
def can_view(self, user_request, *args, **kwargs): def can_view(self, user_request, *args, **kwargs):
@ -454,7 +477,7 @@ class Vlan(models.Model):
:param self: instance vlan à voir :param self: instance vlan à voir
:param user_request: instance user qui fait l'edition :param user_request: instance user qui fait l'edition
:return: True ou False avec la raison de l'échec le cas échéant""" :return: True ou False avec la raison de l'échec le cas échéant"""
return user_request.has_perms(('cableur',)), u"Vous n'avez pas le droit\ return user_request.has_perm('machines.view_vlan'), u"Vous n'avez pas le droit\
de voir les vlans" de voir les vlans"
def __str__(self): def __str__(self):
@ -491,6 +514,11 @@ class Nas(models.Model):
) )
autocapture_mac = models.BooleanField(default=False) autocapture_mac = models.BooleanField(default=False)
class Meta:
permissions = (
("view_nas", "Peut voir un objet Nas"),
)
def get_instance(nasid, *args, **kwargs): def get_instance(nasid, *args, **kwargs):
"""Récupère une instance """Récupère une instance
:param nasid: Instance id à trouver :param nasid: Instance id à trouver
@ -502,7 +530,7 @@ class Nas(models.Model):
un nas un nas
:param user_request: instance utilisateur qui fait la requête :param user_request: instance utilisateur qui fait la requête
:return: soit True, soit False avec la raison de l'échec""" :return: soit True, soit False avec la raison de l'échec"""
return user_request.has_perms(('infra',)), u"Vous n'avez pas le droit\ return user_request.has_perm('machines.create_nas'), u"Vous n'avez pas le droit\
de créer un nas" de créer un nas"
def can_edit(self, user_request, *args, **kwargs): def can_edit(self, user_request, *args, **kwargs):
@ -511,7 +539,7 @@ class Nas(models.Model):
:param self: Instance nas à editer :param self: Instance nas à editer
:param user_request: Utilisateur qui fait la requête :param user_request: Utilisateur qui fait la requête
:return: soit True, soit False avec la raison de l'échec""" :return: soit True, soit False avec la raison de l'échec"""
if not user_request.has_perms(('infra',)): if not user_request.has_perm('machines.change_nas'):
return False, u"Vous n'avez pas le droit d'éditer des nas" return False, u"Vous n'avez pas le droit d'éditer des nas"
return True, None return True, None
@ -521,7 +549,7 @@ class Nas(models.Model):
:param self: Instance nas à delete :param self: Instance nas à delete
:param user_request: Utilisateur qui fait la requête :param user_request: Utilisateur qui fait la requête
:return: soit True, soit False avec la raison de l'échec""" :return: soit True, soit False avec la raison de l'échec"""
return user_request.has_perms(('infra',)), u"Vous n'avez pas le droit\ return user_request.has_perm('machines.delete_nas'), u"Vous n'avez pas le droit\
de supprimer un nas" de supprimer un nas"
def can_view_all(user_request, *args, **kwargs): def can_view_all(user_request, *args, **kwargs):
@ -530,7 +558,7 @@ class Nas(models.Model):
:param user_request: instance user qui fait l'edition :param user_request: instance user qui fait l'edition
:return: True ou False avec la raison de l'échec le cas échéant""" :return: True ou False avec la raison de l'échec le cas échéant"""
return user_request.has_perms(('cableur',)), u"Vous n'avez pas le droit\ return user_request.has_perm('machines.view_nas'), u"Vous n'avez pas le droit\
de voir les nas" de voir les nas"
def can_view(self, user_request, *args, **kwargs): def can_view(self, user_request, *args, **kwargs):
@ -539,7 +567,7 @@ class Nas(models.Model):
:param self: instance nas à voir :param self: instance nas à voir
:param user_request: instance user qui fait l'edition :param user_request: instance user qui fait l'edition
:return: True ou False avec la raison de l'échec le cas échéant""" :return: True ou False avec la raison de l'échec le cas échéant"""
return user_request.has_perms(('cableur',)), u"Vous n'avez pas le droit\ return user_request.has_perm('machines.view_nas'), u"Vous n'avez pas le droit\
de voir les nas" de voir les nas"
def __str__(self): def __str__(self):
@ -578,6 +606,11 @@ class SOA(models.Model):
help_text='Time To Live' help_text='Time To Live'
) )
class Meta:
permissions = (
("view_soa", "Peut voir un objet soa"),
)
def get_instance(soaid, *args, **kwargs): def get_instance(soaid, *args, **kwargs):
"""Récupère une instance """Récupère une instance
:param soaid: Instance id à trouver :param soaid: Instance id à trouver
@ -589,7 +622,7 @@ class SOA(models.Model):
un soa un soa
:param user_request: instance utilisateur qui fait la requête :param user_request: instance utilisateur qui fait la requête
:return: soit True, soit False avec la raison de l'échec""" :return: soit True, soit False avec la raison de l'échec"""
return user_request.has_perms(('infra',)), u"Vous n'avez pas le droit\ return user_request.has_perm('machines.add_soa'), u"Vous n'avez pas le droit\
de créer un enregistrement SOA" de créer un enregistrement SOA"
def can_edit(self, user_request, *args, **kwargs): def can_edit(self, user_request, *args, **kwargs):
@ -598,7 +631,7 @@ class SOA(models.Model):
:param self: Instance soa à editer :param self: Instance soa à editer
:param user_request: Utilisateur qui fait la requête :param user_request: Utilisateur qui fait la requête
:return: soit True, soit False avec la raison de l'échec""" :return: soit True, soit False avec la raison de l'échec"""
if not user_request.has_perms(('infra',)): if not user_request.has_perm('machines.change_soa'):
return False, u"Vous n'avez pas le droit d'éditer des enregistrements SOA" return False, u"Vous n'avez pas le droit d'éditer des enregistrements SOA"
return True, None return True, None
@ -608,7 +641,7 @@ class SOA(models.Model):
:param self: Instance soa à delete :param self: Instance soa à delete
:param user_request: Utilisateur qui fait la requête :param user_request: Utilisateur qui fait la requête
:return: soit True, soit False avec la raison de l'échec""" :return: soit True, soit False avec la raison de l'échec"""
return user_request.has_perms(('infra',)), u"Vous n'avez pas le droit\ return user_request.has_perm('machines.delete_soa'), u"Vous n'avez pas le droit\
de supprimer des enregistrements SOA" de supprimer des enregistrements SOA"
def can_view_all(user_request, *args, **kwargs): def can_view_all(user_request, *args, **kwargs):
@ -616,7 +649,7 @@ class SOA(models.Model):
droit particulier cableur correspondant droit particulier cableur correspondant
:param user_request: instance user qui fait l'edition :param user_request: instance user qui fait l'edition
:return: True ou False avec la raison de l'échec le cas échéant""" :return: True ou False avec la raison de l'échec le cas échéant"""
return user_request.has_perms(('cableur',)), u"Vous n'avez pas le droit\ return user_request.has_perm('machines.view_soa'), u"Vous n'avez pas le droit\
de voir les enreistrement SOA" de voir les enreistrement SOA"
def can_view(self, user_request, *args, **kwargs): def can_view(self, user_request, *args, **kwargs):
@ -625,7 +658,7 @@ class SOA(models.Model):
:param self: instance soa à voir :param self: instance soa à voir
:param user_request: instance user qui fait l'edition :param user_request: instance user qui fait l'edition
:return: True ou False avec la raison de l'échec le cas échéant""" :return: True ou False avec la raison de l'échec le cas échéant"""
return user_request.has_perms(('cableur',)), u"Vous n'avez pas le droit\ return user_request.has_perm('machines.view_soa'), u"Vous n'avez pas le droit\
de voir les enreistrement SOA" de voir les enreistrement SOA"
def __str__(self): def __str__(self):
@ -698,6 +731,12 @@ class Extension(models.Model):
default=SOA.new_default_soa default=SOA.new_default_soa
) )
class Meta:
permissions = (
("view_extension", "Peut voir un objet extension"),
("use_all_extension", "Peut utiliser toutes les extension"),
)
@cached_property @cached_property
def dns_entry(self): def dns_entry(self):
""" Une entrée DNS A et AAAA sur origin (zone self)""" """ Une entrée DNS A et AAAA sur origin (zone self)"""
@ -721,7 +760,7 @@ class Extension(models.Model):
une extension une extension
:param user_request: instance utilisateur qui fait la requête :param user_request: instance utilisateur qui fait la requête
:return: soit True, soit False avec la raison de l'échec""" :return: soit True, soit False avec la raison de l'échec"""
return user_request.has_perms(('infra',)), u"Vous n'avez pas le droit\ return user_request.has_perm('machines.add_extension'), u"Vous n'avez pas le droit\
de créer une extension" de créer une extension"
def can_edit(self, user_request, *args, **kwargs): def can_edit(self, user_request, *args, **kwargs):
@ -730,7 +769,7 @@ class Extension(models.Model):
:param self: Instance extension à editer :param self: Instance extension à editer
:param user_request: Utilisateur qui fait la requête :param user_request: Utilisateur qui fait la requête
:return: soit True, soit False avec la raison de l'échec""" :return: soit True, soit False avec la raison de l'échec"""
if not user_request.has_perms(('infra',)): if not user_request.has_perm('machines.change_extension'):
return False, u"Vous n'avez pas le droit d'éditer des extensions" return False, u"Vous n'avez pas le droit d'éditer des extensions"
return True, None return True, None
@ -740,7 +779,7 @@ class Extension(models.Model):
:param self: Instance extension à delete :param self: Instance extension à delete
:param user_request: Utilisateur qui fait la requête :param user_request: Utilisateur qui fait la requête
:return: soit True, soit False avec la raison de l'échec""" :return: soit True, soit False avec la raison de l'échec"""
return user_request.has_perms(('infra',)), u"Vous n'avez pas le droit\ return user_request.has_perm('machines.delete_extension'), u"Vous n'avez pas le droit\
de supprimer des extension" de supprimer des extension"
def can_view_all(user_request, *args, **kwargs): def can_view_all(user_request, *args, **kwargs):
@ -748,14 +787,14 @@ class Extension(models.Model):
droit particulier cableur correspondant droit particulier cableur correspondant
:param user_request: instance user qui fait l'edition :param user_request: instance user qui fait l'edition
:return: True ou False avec la raison de l'échec le cas échéant""" :return: True ou False avec la raison de l'échec le cas échéant"""
return user_request.has_perms(('cableur',)), u"Vous n'avez pas le droit\ return user_request.has_perm('machines.view_extension'), u"Vous n'avez pas le droit\
de voir les extensions" de voir les extensions"
def can_use_all(user_request, *args, **kwargs): def can_use_all(user_request, *args, **kwargs):
"""Superdroit qui permet d'utiliser toutes les extensions sans restrictions """Superdroit qui permet d'utiliser toutes les extensions sans restrictions
:param user_request: instance user qui fait l'edition :param user_request: instance user qui fait l'edition
:return: True ou False avec la raison de l'échec le cas échéant""" :return: True ou False avec la raison de l'échec le cas échéant"""
return user_request.has_perms(('infra',)), None return user_request.has_perm('machines.use_all_extension'), None
def can_view(self, user_request, *args, **kwargs): def can_view(self, user_request, *args, **kwargs):
"""Vérifie qu'on peut bien voir cette instance particulière avec """Vérifie qu'on peut bien voir cette instance particulière avec
@ -763,7 +802,7 @@ class Extension(models.Model):
:param self: instance extension à voir :param self: instance extension à voir
:param user_request: instance user qui fait l'edition :param user_request: instance user qui fait l'edition
:return: True ou False avec la raison de l'échec le cas échéant""" :return: True ou False avec la raison de l'échec le cas échéant"""
return user_request.has_perms(('cableur',)), u"Vous n'avez pas le droit\ return user_request.has_perm('machines.view_extension'), u"Vous n'avez pas le droit\
de voir les extensions" de voir les extensions"
def __str__(self): def __str__(self):
@ -785,6 +824,11 @@ class Mx(models.Model):
priority = models.PositiveIntegerField(unique=True) priority = models.PositiveIntegerField(unique=True)
name = models.OneToOneField('Domain', on_delete=models.PROTECT) name = models.OneToOneField('Domain', on_delete=models.PROTECT)
class Meta:
permissions = (
("view_mx", "Peut voir un objet mx"),
)
@cached_property @cached_property
def dns_entry(self): def dns_entry(self):
"""Renvoie l'entrée DNS complète pour un MX à mettre dans les """Renvoie l'entrée DNS complète pour un MX à mettre dans les
@ -802,7 +846,7 @@ class Mx(models.Model):
un mx un mx
:param user_request: instance utilisateur qui fait la requête :param user_request: instance utilisateur qui fait la requête
:return: soit True, soit False avec la raison de l'échec""" :return: soit True, soit False avec la raison de l'échec"""
return user_request.has_perms(('infra',)), u"Vous n'avez pas le droit\ return user_request.has_perm('machines.add_mx'), u"Vous n'avez pas le droit\
de créer un enregistrement MX" de créer un enregistrement MX"
def can_edit(self, user_request, *args, **kwargs): def can_edit(self, user_request, *args, **kwargs):
@ -811,7 +855,7 @@ class Mx(models.Model):
:param self: Instance mx à editer :param self: Instance mx à editer
:param user_request: Utilisateur qui fait la requête :param user_request: Utilisateur qui fait la requête
:return: soit True, soit False avec la raison de l'échec""" :return: soit True, soit False avec la raison de l'échec"""
if not user_request.has_perms(('infra',)): if not user_request.has_perm('machines.change_mx'):
return False, u"Vous n'avez pas le droit d'éditer des enregstrements MX" return False, u"Vous n'avez pas le droit d'éditer des enregstrements MX"
return True, None return True, None
@ -821,7 +865,7 @@ class Mx(models.Model):
:param self: Instance mx à delete :param self: Instance mx à delete
:param user_request: Utilisateur qui fait la requête :param user_request: Utilisateur qui fait la requête
:return: soit True, soit False avec la raison de l'échec""" :return: soit True, soit False avec la raison de l'échec"""
return user_request.has_perms(('infra',)), u"Vous n'avez pas le droit\ return user_request.has_perm('machines.delete_mx'), u"Vous n'avez pas le droit\
de supprimer un enregistrement MX" de supprimer un enregistrement MX"
def can_view_all(user_request, *args, **kwargs): def can_view_all(user_request, *args, **kwargs):
@ -829,7 +873,7 @@ class Mx(models.Model):
droit particulier cableur correspondant droit particulier cableur correspondant
:param user_request: instance user qui fait l'edition :param user_request: instance user qui fait l'edition
:return: True ou False avec la raison de l'échec le cas échéant""" :return: True ou False avec la raison de l'échec le cas échéant"""
return user_request.has_perms(('cableur',)), u"Vous n'avez pas le droit\ return user_request.has_perm('machines.view_mx'), u"Vous n'avez pas le droit\
de voir les enregistrements MX" de voir les enregistrements MX"
def can_view(self, user_request, *args, **kwargs): def can_view(self, user_request, *args, **kwargs):
@ -838,7 +882,7 @@ class Mx(models.Model):
:param self: instance mx à voir :param self: instance mx à voir
:param user_request: instance user qui fait l'edition :param user_request: instance user qui fait l'edition
:return: True ou False avec la raison de l'échec le cas échéant""" :return: True ou False avec la raison de l'échec le cas échéant"""
return user_request.has_perms(('cableur',)), u"Vous n'avez pas le droit\ return user_request.has_perm('machines.view_mx'), u"Vous n'avez pas le droit\
de voir les enregistrements MX" de voir les enregistrements MX"
def __str__(self): def __str__(self):
@ -852,6 +896,11 @@ class Ns(models.Model):
zone = models.ForeignKey('Extension', on_delete=models.PROTECT) zone = models.ForeignKey('Extension', on_delete=models.PROTECT)
ns = models.OneToOneField('Domain', on_delete=models.PROTECT) ns = models.OneToOneField('Domain', on_delete=models.PROTECT)
class Meta:
permissions = (
("view_nx", "Peut voir un objet nx"),
)
@cached_property @cached_property
def dns_entry(self): def dns_entry(self):
"""Renvoie un enregistrement NS complet pour les filezones""" """Renvoie un enregistrement NS complet pour les filezones"""
@ -868,7 +917,7 @@ class Ns(models.Model):
un ns un ns
:param user_request: instance utilisateur qui fait la requête :param user_request: instance utilisateur qui fait la requête
:return: soit True, soit False avec la raison de l'échec""" :return: soit True, soit False avec la raison de l'échec"""
return user_request.has_perms(('infra',)), u"Vous n'avez pas le droit\ return user_request.has_perm('machines.add_ns'), u"Vous n'avez pas le droit\
de créer un enregistrement NS" de créer un enregistrement NS"
def can_edit(self, user_request, *args, **kwargs): def can_edit(self, user_request, *args, **kwargs):
@ -877,7 +926,7 @@ class Ns(models.Model):
:param self: Instance ns à editer :param self: Instance ns à editer
:param user_request: Utilisateur qui fait la requête :param user_request: Utilisateur qui fait la requête
:return: soit True, soit False avec la raison de l'échec""" :return: soit True, soit False avec la raison de l'échec"""
if not user_request.has_perms(('infra',)): if not user_request.has_perm('machines.change_ns'):
return False, u"Vous n'avez pas le droit d'éditer des enregistrements NS" return False, u"Vous n'avez pas le droit d'éditer des enregistrements NS"
return True, None return True, None
@ -887,7 +936,7 @@ class Ns(models.Model):
:param self: Instance ns à delete :param self: Instance ns à delete
:param user_request: Utilisateur qui fait la requête :param user_request: Utilisateur qui fait la requête
:return: soit True, soit False avec la raison de l'échec""" :return: soit True, soit False avec la raison de l'échec"""
return user_request.has_perms(('infra',)), u"Vous n'avez pas le droit\ return user_request.has_perm('machines.del_ns'), u"Vous n'avez pas le droit\
de supprimer un enregistrement NS" de supprimer un enregistrement NS"
def can_view_all(user_request, *args, **kwargs): def can_view_all(user_request, *args, **kwargs):
@ -895,7 +944,7 @@ class Ns(models.Model):
droit particulier cableur correspondant droit particulier cableur correspondant
:param user_request: instance user qui fait l'edition :param user_request: instance user qui fait l'edition
:return: True ou False avec la raison de l'échec le cas échéant""" :return: True ou False avec la raison de l'échec le cas échéant"""
return user_request.has_perms(('cableur',)), u"Vous n'avez pas le droit\ return user_request.has_perm('machines.view_ns'), u"Vous n'avez pas le droit\
de voir les enregistrements NS" de voir les enregistrements NS"
def can_view(self, user_request, *args, **kwargs): def can_view(self, user_request, *args, **kwargs):
@ -904,7 +953,7 @@ class Ns(models.Model):
:param self: instance ns à voir :param self: instance ns à voir
:param user_request: instance user qui fait l'edition :param user_request: instance user qui fait l'edition
:return: True ou False avec la raison de l'échec le cas échéant""" :return: True ou False avec la raison de l'échec le cas échéant"""
return user_request.has_perms(('cableur',)), u"Vous n'avez pas le droit\ return user_request.has_perm('machines.view_ns'), u"Vous n'avez pas le droit\
de voir les enregistrements NS" de voir les enregistrements NS"
def __str__(self): def __str__(self):
@ -919,6 +968,11 @@ class Txt(models.Model):
field1 = models.CharField(max_length=255) field1 = models.CharField(max_length=255)
field2 = models.TextField(max_length=2047) field2 = models.TextField(max_length=2047)
class Meta:
permissions = (
("view_txt", "Peut voir un objet txt"),
)
def get_instance(txtid, *args, **kwargs): def get_instance(txtid, *args, **kwargs):
"""Récupère une instance """Récupère une instance
:param txtid: Instance id à trouver :param txtid: Instance id à trouver
@ -930,7 +984,7 @@ class Txt(models.Model):
un txt un txt
:param user_request: instance utilisateur qui fait la requête :param user_request: instance utilisateur qui fait la requête
:return: soit True, soit False avec la raison de l'échec""" :return: soit True, soit False avec la raison de l'échec"""
return user_request.has_perms(('infra',)), u"Vous n'avez pas le droit\ return user_request.has_perm('machines.add_txt'), u"Vous n'avez pas le droit\
de créer un enregistrement TXT" de créer un enregistrement TXT"
def can_edit(self, user_request, *args, **kwargs): def can_edit(self, user_request, *args, **kwargs):
@ -939,7 +993,7 @@ class Txt(models.Model):
:param self: Instance txt à editer :param self: Instance txt à editer
:param user_request: Utilisateur qui fait la requête :param user_request: Utilisateur qui fait la requête
:return: soit True, soit False avec la raison de l'échec""" :return: soit True, soit False avec la raison de l'échec"""
if not user_request.has_perms(('infra',)): if not user_request.has_perm('machines.change_txt'):
return False, u"Vous n'avez pas le droit d'éditer des enregistrement TXT" return False, u"Vous n'avez pas le droit d'éditer des enregistrement TXT"
return True, None return True, None
@ -949,7 +1003,7 @@ class Txt(models.Model):
:param self: Instance txt à delete :param self: Instance txt à delete
:param user_request: Utilisateur qui fait la requête :param user_request: Utilisateur qui fait la requête
:return: soit True, soit False avec la raison de l'échec""" :return: soit True, soit False avec la raison de l'échec"""
return user_request.has_perms(('infra',)), u"Vous n'avez pas le droit\ return user_request.has_perm('machines.delete_txt'), u"Vous n'avez pas le droit\
de supprimer des enregistrements TXT" de supprimer des enregistrements TXT"
def can_view_all(user_request, *args, **kwargs): def can_view_all(user_request, *args, **kwargs):
@ -957,7 +1011,7 @@ class Txt(models.Model):
droit particulier cableur correspondant droit particulier cableur correspondant
:param user_request: instance user qui fait l'edition :param user_request: instance user qui fait l'edition
:return: True ou False avec la raison de l'échec le cas échéant""" :return: True ou False avec la raison de l'échec le cas échéant"""
return user_request.has_perms(('cableur',)), u"Vous n'avez pas le droit\ return user_request.has_perm('machines.view_txt'), u"Vous n'avez pas le droit\
de voir les enregistrements TXT" de voir les enregistrements TXT"
def can_view(self, user_request, *args, **kwargs): def can_view(self, user_request, *args, **kwargs):
@ -966,7 +1020,7 @@ class Txt(models.Model):
:param self: instance txt à voir :param self: instance txt à voir
:param user_request: instance user qui fait l'edition :param user_request: instance user qui fait l'edition
:return: True ou False avec la raison de l'échec le cas échéant""" :return: True ou False avec la raison de l'échec le cas échéant"""
return user_request.has_perms(('cableur',)), u"Vous n'avez pas le droit\ return user_request.has_perm('machines.view_txt'), u"Vous n'avez pas le droit\
de voir les enregistrements TXT" de voir les enregistrements TXT"
def __str__(self): def __str__(self):
@ -1022,6 +1076,11 @@ class Srv(models.Model):
help_text="Serveur cible" help_text="Serveur cible"
) )
class Meta:
permissions = (
("view_soa", "Peut voir un objet soa"),
)
def get_instance(srvid, *args, **kwargs): def get_instance(srvid, *args, **kwargs):
"""Récupère une instance """Récupère une instance
:param srvid: Instance id à trouver :param srvid: Instance id à trouver
@ -1033,7 +1092,7 @@ class Srv(models.Model):
un srv un srv
:param user_request: instance utilisateur qui fait la requête :param user_request: instance utilisateur qui fait la requête
:return: soit True, soit False avec la raison de l'échec""" :return: soit True, soit False avec la raison de l'échec"""
return user_request.has_perms(('infra',)), u"Vous n'avez pas le droit\ return user_request.has_perm('machines.add_soa'), u"Vous n'avez pas le droit\
de créer un enregistrement SRV" de créer un enregistrement SRV"
def can_edit(self, user_request, *args, **kwargs): def can_edit(self, user_request, *args, **kwargs):
@ -1042,7 +1101,7 @@ class Srv(models.Model):
:param self: Instance srv à editer :param self: Instance srv à editer
:param user_request: Utilisateur qui fait la requête :param user_request: Utilisateur qui fait la requête
:return: soit True, soit False avec la raison de l'échec""" :return: soit True, soit False avec la raison de l'échec"""
if not user_request.has_perms(('infra',)): if not user_request.has_perm('machines.change_soa'):
return False, u"Vous n'avez pas le droit d'éditer des enregistrements SRV" return False, u"Vous n'avez pas le droit d'éditer des enregistrements SRV"
return True, None return True, None
@ -1052,7 +1111,7 @@ class Srv(models.Model):
:param self: Instance srv à delete :param self: Instance srv à delete
:param user_request: Utilisateur qui fait la requête :param user_request: Utilisateur qui fait la requête
:return: soit True, soit False avec la raison de l'échec""" :return: soit True, soit False avec la raison de l'échec"""
return user_request.has_perms(('infra',)), u"Vous n'avez pas le droit\ return user_request.has_perm('machines.delete_soa'), u"Vous n'avez pas le droit\
de supprimer un enregistrement SRV" de supprimer un enregistrement SRV"
def can_view_all(user_request, *args, **kwargs): def can_view_all(user_request, *args, **kwargs):
@ -1060,7 +1119,7 @@ class Srv(models.Model):
droit particulier cableur correspondant droit particulier cableur correspondant
:param user_request: instance user qui fait l'edition :param user_request: instance user qui fait l'edition
:return: True ou False avec la raison de l'échec le cas échéant""" :return: True ou False avec la raison de l'échec le cas échéant"""
return user_request.has_perms(('cableur',)), u"Vous n'avez pas le droit\ return user_request.has_perm('machines.view_soa'), u"Vous n'avez pas le droit\
de voir les enregistrements SRV" de voir les enregistrements SRV"
def can_view(self, user_request, *args, **kwargs): def can_view(self, user_request, *args, **kwargs):
@ -1069,7 +1128,7 @@ class Srv(models.Model):
:param self: instance srv à voir :param self: instance srv à voir
:param user_request: instance user qui fait l'edition :param user_request: instance user qui fait l'edition
:return: True ou False avec la raison de l'échec le cas échéant""" :return: True ou False avec la raison de l'échec le cas échéant"""
return user_request.has_perms(('cableur',)), u"Vous n'avez pas le droit\ return user_request.has_perm('machines.view_soa'), u"Vous n'avez pas le droit\
de voir les enregistrements SRV" de voir les enregistrements SRV"
def __str__(self): def __str__(self):
@ -1108,6 +1167,11 @@ class Interface(models.Model):
details = models.CharField(max_length=255, blank=True) details = models.CharField(max_length=255, blank=True)
port_lists = models.ManyToManyField('OuverturePortList', blank=True) port_lists = models.ManyToManyField('OuverturePortList', blank=True)
class Meta:
permissions = (
("view_interface", "Peut voir un objet interface"),
)
@cached_property @cached_property
def is_active(self): def is_active(self):
""" Renvoie si une interface doit avoir accès ou non """ """ Renvoie si une interface doit avoir accès ou non """
@ -1205,7 +1269,7 @@ class Interface(models.Model):
machine = Machine.objects.get(pk=machineid) machine = Machine.objects.get(pk=machineid)
except Machine.DoesNotExist: except Machine.DoesNotExist:
return False, u"Machine inexistante" return False, u"Machine inexistante"
if not user_request.has_perms(('cableur',)): if not user_request.has_perm('machines.add_interface'):
options, created = preferences.models.OptionalMachine.objects.get_or_create() options, created = preferences.models.OptionalMachine.objects.get_or_create()
max_lambdauser_interfaces = options.max_lambdauser_interfaces max_lambdauser_interfaces = options.max_lambdauser_interfaces
if machine.user != user_request: if machine.user != user_request:
@ -1223,7 +1287,7 @@ class Interface(models.Model):
:param self: Instance interface à editer :param self: Instance interface à editer
:param user_request: Utilisateur qui fait la requête :param user_request: Utilisateur qui fait la requête
:return: soit True, soit False avec la raison de l'échec""" :return: soit True, soit False avec la raison de l'échec"""
if not user_request.has_perms(('cableur',)) and self.machine.user != user_request: if not user_request.has_perm('machines.change_interface') and self.machine.user != user_request:
return False, u"Vous ne pouvez pas éditer une machine\ return False, u"Vous ne pouvez pas éditer une machine\
d'un autre user que vous sans droit" d'un autre user que vous sans droit"
return True, None return True, None
@ -1234,7 +1298,7 @@ class Interface(models.Model):
:param self: Instance interface à del :param self: Instance interface à del
:param user_request: Utilisateur qui fait la requête :param user_request: Utilisateur qui fait la requête
:return: soit True, soit False avec la raison de l'échec""" :return: soit True, soit False avec la raison de l'échec"""
if not user_request.has_perms(('cableur',)) and self.machine.user != user_request: if not user_request.has_perm('machines.delete_interface') and self.machine.user != user_request:
return False, u"Vous ne pouvez pas éditer une machine d'un autre\ return False, u"Vous ne pouvez pas éditer une machine d'un autre\
user que vous sans droit" user que vous sans droit"
return True, None return True, None
@ -1244,7 +1308,7 @@ class Interface(models.Model):
droit particulier cableur correspondant droit particulier cableur correspondant
:param user_request: instance user qui fait l'edition :param user_request: instance user qui fait l'edition
:return: True ou False avec la raison de l'échec le cas échéant""" :return: True ou False avec la raison de l'échec le cas échéant"""
if not user_request.has_perms(('cableur',)): if not user_request.has_perm('machines.view_interface'):
return False, u"Vous n'avez pas le droit de voir des machines autre\ return False, u"Vous n'avez pas le droit de voir des machines autre\
que les vôtres" que les vôtres"
return True, None return True, None
@ -1255,7 +1319,7 @@ class Interface(models.Model):
:param self: instance interface à voir :param self: instance interface à voir
:param user_request: instance user qui fait l'edition :param user_request: instance user qui fait l'edition
:return: True ou False avec la raison de l'échec le cas échéant""" :return: True ou False avec la raison de l'échec le cas échéant"""
if not user_request.has_perms(('cableur',)) and self.machine.user != user_request: if not user_request.has_perm('machines.view_interface') and self.machine.user != user_request:
return False, u"Vous n'avez pas le droit de voir des machines autre\ return False, u"Vous n'avez pas le droit de voir des machines autre\
que les vôtres" que les vôtres"
return True, None return True, None
@ -1307,6 +1371,9 @@ class Domain(models.Model):
class Meta: class Meta:
unique_together = (("name", "extension"),) unique_together = (("name", "extension"),)
permissions = (
("view_domain", "Peut voir un objet domain"),
)
def get_extension(self): def get_extension(self):
""" Retourne l'extension de l'interface parente si c'est un A """ Retourne l'extension de l'interface parente si c'est un A
@ -1387,7 +1454,7 @@ class Domain(models.Model):
interface = Interface.objects.get(pk=interfaceid) interface = Interface.objects.get(pk=interfaceid)
except Interface.DoesNotExist: except Interface.DoesNotExist:
return False, u"Interface inexistante" return False, u"Interface inexistante"
if not user_request.has_perms(('cableur',)): if not user_request.has_perm('machines.add_domain'):
options, created = preferences.models.OptionalMachine.objects.get_or_create() options, created = preferences.models.OptionalMachine.objects.get_or_create()
max_lambdauser_aliases = options.max_lambdauser_aliases max_lambdauser_aliases = options.max_lambdauser_aliases
if interface.machine.user != user_request: if interface.machine.user != user_request:
@ -1409,7 +1476,7 @@ class Domain(models.Model):
:param self: Instance domain à editer :param self: Instance domain à editer
:param user_request: Utilisateur qui fait la requête :param user_request: Utilisateur qui fait la requête
:return: soit True, soit False avec la raison de l'échec""" :return: soit True, soit False avec la raison de l'échec"""
if not user_request.has_perms(('cableur',)) and\ if not user_request.has_perm('machines.change_domain') and\
self.get_source_interface.machine.user != user_request: self.get_source_interface.machine.user != user_request:
return False, u"Vous ne pouvez pas editer un alias à une machine\ return False, u"Vous ne pouvez pas editer un alias à une machine\
d'un autre user que vous sans droit" d'un autre user que vous sans droit"
@ -1421,7 +1488,7 @@ class Domain(models.Model):
:param self: Instance domain à del :param self: Instance domain à del
:param user_request: Utilisateur qui fait la requête :param user_request: Utilisateur qui fait la requête
:return: soit True, soit False avec la raison de l'échec""" :return: soit True, soit False avec la raison de l'échec"""
if not user_request.has_perms(('cableur',)) and\ if not user_request.has_perm('machines.delete_domain') and\
self.get_source_interface.machine.user != user_request: self.get_source_interface.machine.user != user_request:
return False, u"Vous ne pouvez pas supprimer un alias à une machine\ return False, u"Vous ne pouvez pas supprimer un alias à une machine\
d'un autre user que vous sans droit" d'un autre user que vous sans droit"
@ -1432,7 +1499,7 @@ class Domain(models.Model):
droit particulier cableur correspondant droit particulier cableur correspondant
:param user_request: instance user qui fait l'edition :param user_request: instance user qui fait l'edition
:return: True ou False avec la raison de l'échec le cas échéant""" :return: True ou False avec la raison de l'échec le cas échéant"""
if not user_request.has_perms(('cableur',)): if not user_request.has_perm('machines.view_domain'):
return False, u"Vous ne pouvez pas supprimer un alias à une machine\ return False, u"Vous ne pouvez pas supprimer un alias à une machine\
d'un autre user que vous sans droit" d'un autre user que vous sans droit"
return True, None return True, None
@ -1443,7 +1510,7 @@ class Domain(models.Model):
:param self: instance domain à voir :param self: instance domain à voir
:param user_request: instance user qui fait l'edition :param user_request: instance user qui fait l'edition
:return: True ou False avec la raison de l'échec le cas échéant""" :return: True ou False avec la raison de l'échec le cas échéant"""
if not user_request.has_perms(('cableur',)) and\ if not user_request.has_perm('machines.view_domain') and\
self.get_source_interface.machine.user != user_request: self.get_source_interface.machine.user != user_request:
return False, u"Vous n'avez pas le droit de voir des machines autre\ return False, u"Vous n'avez pas le droit de voir des machines autre\
que les vôtres" que les vôtres"
@ -1459,6 +1526,11 @@ class IpList(models.Model):
ipv4 = models.GenericIPAddressField(protocol='IPv4', unique=True) ipv4 = models.GenericIPAddressField(protocol='IPv4', unique=True)
ip_type = models.ForeignKey('IpType', on_delete=models.CASCADE) ip_type = models.ForeignKey('IpType', on_delete=models.CASCADE)
class Meta:
permissions = (
("view_iplist", "Peut voir un objet iplist"),
)
@cached_property @cached_property
def need_infra(self): def need_infra(self):
""" Permet de savoir si un user basique peut assigner cette ip ou """ Permet de savoir si un user basique peut assigner cette ip ou
@ -1487,7 +1559,7 @@ class IpList(models.Model):
une ip une ip
:param user_request: instance utilisateur qui fait la requête :param user_request: instance utilisateur qui fait la requête
:return: soit True, soit False avec la raison de l'échec""" :return: soit True, soit False avec la raison de l'échec"""
return user_request.has_perms(('infra',)), u"Vous n'avez pas le droit\ return user_request.has_perm('machines.add_iplist'), u"Vous n'avez pas le droit\
de créer une ip" de créer une ip"
def can_edit(self, user_request, *args, **kwargs): def can_edit(self, user_request, *args, **kwargs):
@ -1496,7 +1568,7 @@ class IpList(models.Model):
:param self: Instance ip à editer :param self: Instance ip à editer
:param user_request: Utilisateur qui fait la requête :param user_request: Utilisateur qui fait la requête
:return: soit True, soit False avec la raison de l'échec""" :return: soit True, soit False avec la raison de l'échec"""
if not user_request.has_perms(('infra',)): if not user_request.has_perm('machines.change_iplist'):
return False, u"Vous n'avez pas le droit d'éditer des enregistrements ip" return False, u"Vous n'avez pas le droit d'éditer des enregistrements ip"
return True, None return True, None
@ -1506,7 +1578,7 @@ class IpList(models.Model):
:param self: Instance ip à delete :param self: Instance ip à delete
:param user_request: Utilisateur qui fait la requête :param user_request: Utilisateur qui fait la requête
:return: soit True, soit False avec la raison de l'échec""" :return: soit True, soit False avec la raison de l'échec"""
if not user_request.has_perms(('infra',)): if not user_request.has_perm('machines.delete_iplist'):
return False, u"Vous n'avez pas le droit d'éditer des enregistrements ip" return False, u"Vous n'avez pas le droit d'éditer des enregistrements ip"
return True, None return True, None
@ -1515,7 +1587,7 @@ class IpList(models.Model):
droit particulier cableur correspondant droit particulier cableur correspondant
:param user_request: instance user qui fait l'edition :param user_request: instance user qui fait l'edition
:return: True ou False avec la raison de l'échec le cas échéant""" :return: True ou False avec la raison de l'échec le cas échéant"""
if not user_request.has_perms(('infra',)): if not user_request.has_perm('machines.view_iplist'):
return False, u"Vous n'avez pas le droit de voir des enregistrements ip" return False, u"Vous n'avez pas le droit de voir des enregistrements ip"
return True, None return True, None
@ -1525,7 +1597,7 @@ class IpList(models.Model):
:param self: instance iplist à voir :param self: instance iplist à voir
:param user_request: instance user qui fait l'edition :param user_request: instance user qui fait l'edition
:return: True ou False avec la raison de l'échec le cas échéant""" :return: True ou False avec la raison de l'échec le cas échéant"""
if not user_request.has_perms(('infra',)): if not user_request.has_perm('machines.view_iplist'):
return False, u"Vous n'avez pas le droit de voir des enregistrements ip" return False, u"Vous n'avez pas le droit de voir des enregistrements ip"
return True, None return True, None
@ -1548,6 +1620,11 @@ class Service(models.Model):
) )
servers = models.ManyToManyField('Interface', through='Service_link') servers = models.ManyToManyField('Interface', through='Service_link')
class Meta:
permissions = (
("view_service", "Peut voir un objet service"),
)
def ask_regen(self): def ask_regen(self):
""" Marque à True la demande de régénération pour un service x """ """ Marque à True la demande de régénération pour un service x """
Service_link.objects.filter(service=self).exclude(asked_regen=True)\ Service_link.objects.filter(service=self).exclude(asked_regen=True)\
@ -1580,7 +1657,7 @@ class Service(models.Model):
un service un service
:param user_request: instance utilisateur qui fait la requête :param user_request: instance utilisateur qui fait la requête
:return: soit True, soit False avec la raison de l'échec""" :return: soit True, soit False avec la raison de l'échec"""
return user_request.has_perms(('infra',)), u"Vous n'avez pas le droit\ return user_request.has_perm('machines.add_service'), u"Vous n'avez pas le droit\
de créer un service" de créer un service"
def can_edit(self, user_request, *args, **kwargs): def can_edit(self, user_request, *args, **kwargs):
@ -1589,7 +1666,7 @@ class Service(models.Model):
:param self: Instance service à editer :param self: Instance service à editer
:param user_request: Utilisateur qui fait la requête :param user_request: Utilisateur qui fait la requête
:return: soit True, soit False avec la raison de l'échec""" :return: soit True, soit False avec la raison de l'échec"""
if not user_request.has_perms(('infra',)): if not user_request.has_perm('machines.change_service'):
return False, u"Vous n'avez pas le droit d'éditer des services" return False, u"Vous n'avez pas le droit d'éditer des services"
return True, None return True, None
@ -1599,7 +1676,7 @@ class Service(models.Model):
:param self: Instance service à delete :param self: Instance service à delete
:param user_request: Utilisateur qui fait la requête :param user_request: Utilisateur qui fait la requête
:return: soit True, soit False avec la raison de l'échec""" :return: soit True, soit False avec la raison de l'échec"""
return user_request.has_perms(('infra',)), u"Vous n'avez pas le droit\ return user_request.has_perm('machines.delete_service'), u"Vous n'avez pas le droit\
de supprimer un service" de supprimer un service"
def can_view_all(user_request, *args, **kwargs): def can_view_all(user_request, *args, **kwargs):
@ -1607,7 +1684,7 @@ class Service(models.Model):
droit particulier cableur correspondant droit particulier cableur correspondant
:param user_request: instance user qui fait l'edition :param user_request: instance user qui fait l'edition
:return: True ou False avec la raison de l'échec le cas échéant""" :return: True ou False avec la raison de l'échec le cas échéant"""
return user_request.has_perms(('cableur',)), u"Vous n'avez pas le droit\ return user_request.has_perm('machines.view_service'), u"Vous n'avez pas le droit\
de voir des services" de voir des services"
def can_view(self, user_request, *args, **kwargs): def can_view(self, user_request, *args, **kwargs):
@ -1616,7 +1693,7 @@ class Service(models.Model):
:param self: instance service à voir :param self: instance service à voir
:param user_request: instance user qui fait l'edition :param user_request: instance user qui fait l'edition
:return: True ou False avec la raison de l'échec le cas échéant""" :return: True ou False avec la raison de l'échec le cas échéant"""
return user_request.has_perms(('cableur',)), u"Vous n'avez pas le droit\ return user_request.has_perm('machines.view_service'), u"Vous n'avez pas le droit\
de voir des services" de voir des services"
def __str__(self): def __str__(self):
@ -1670,7 +1747,7 @@ class Service_link(models.Model):
un servicelink un servicelink
:param user_request: instance utilisateur qui fait la requête :param user_request: instance utilisateur qui fait la requête
:return: soit True, soit False avec la raison de l'échec""" :return: soit True, soit False avec la raison de l'échec"""
return user_request.has_perms(('infra',)), u"Vous n'avez pas le droit\ return user_request.has_perm('machines.add_service'), u"Vous n'avez pas le droit\
de créer un service" de créer un service"
def can_edit(self, user_request, *args, **kwargs): def can_edit(self, user_request, *args, **kwargs):
@ -1679,7 +1756,7 @@ class Service_link(models.Model):
:param self: Instance servicelink à editer :param self: Instance servicelink à editer
:param user_request: Utilisateur qui fait la requête :param user_request: Utilisateur qui fait la requête
:return: soit True, soit False avec la raison de l'échec""" :return: soit True, soit False avec la raison de l'échec"""
if not user_request.has_perms(('infra',)): if not user_request.has_perm('machines.change_service'):
return False, u"Vous n'avez pas le droit d'éditer des services" return False, u"Vous n'avez pas le droit d'éditer des services"
return True, None return True, None
@ -1689,7 +1766,7 @@ class Service_link(models.Model):
:param self: Instance servicelink à delete :param self: Instance servicelink à delete
:param user_request: Utilisateur qui fait la requête :param user_request: Utilisateur qui fait la requête
:return: soit True, soit False avec la raison de l'échec""" :return: soit True, soit False avec la raison de l'échec"""
if not user_request.has_perms(('infra',)): if not user_request.has_perm('machines.delete_service'):
return False, u"Vous n'avez pas le droit d'éditer des services" return False, u"Vous n'avez pas le droit d'éditer des services"
return True, None return True, None
@ -1698,7 +1775,7 @@ class Service_link(models.Model):
droit particulier cableur correspondant droit particulier cableur correspondant
:param user_request: instance user qui fait l'edition :param user_request: instance user qui fait l'edition
:return: True ou False avec la raison de l'échec le cas échéant""" :return: True ou False avec la raison de l'échec le cas échéant"""
return user_request.has_perms(('cableur',)), u"Vous n'avez pas le droit\ return user_request.has_perm('machines.view_service'), u"Vous n'avez pas le droit\
de voir des liens de services" de voir des liens de services"
def can_view(self, user_request, *args, **kwargs): def can_view(self, user_request, *args, **kwargs):
@ -1707,7 +1784,7 @@ class Service_link(models.Model):
:param self: instance service à voir :param self: instance service à voir
:param user_request: instance user qui fait l'edition :param user_request: instance user qui fait l'edition
:return: True ou False avec la raison de l'échec le cas échéant""" :return: True ou False avec la raison de l'échec le cas échéant"""
return user_request.has_perms(('cableur',)), u"Vous n'avez pas le droit\ return user_request.has_perm('machines.view_service'), u"Vous n'avez pas le droit\
de voir des liens de services" de voir des liens de services"
def __str__(self): def __str__(self):
@ -1723,6 +1800,11 @@ class OuverturePortList(models.Model):
max_length=255 max_length=255
) )
class Meta:
permissions = (
("view_ouvertureportlist", "Peut voir un objet ouvertureport"),
)
def get_instance(ouvertureportlistid, *args, **kwargs): def get_instance(ouvertureportlistid, *args, **kwargs):
"""Récupère une instance """Récupère une instance
:param ouvertureportlistid: Instance id à trouver :param ouvertureportlistid: Instance id à trouver
@ -1734,7 +1816,7 @@ class OuverturePortList(models.Model):
une ouverture de port une ouverture de port
:param user_request: instance utilisateur qui fait la requête :param user_request: instance utilisateur qui fait la requête
:return: soit True, soit False avec la raison de l'échec""" :return: soit True, soit False avec la raison de l'échec"""
return user_request.has_perms(('bureau',)) , u"Vous n'avez pas le droit\ return user_request.has_perm('machines.add_ouvertureportlist') , u"Vous n'avez pas le droit\
d'ouvrir un port" d'ouvrir un port"
def can_edit(self, user_request, *args, **kwargs): def can_edit(self, user_request, *args, **kwargs):
@ -1743,7 +1825,7 @@ class OuverturePortList(models.Model):
:param self: Instance ouvertureportlist à editer :param self: Instance ouvertureportlist à editer
:param user_request: Utilisateur qui fait la requête :param user_request: Utilisateur qui fait la requête
:return: soit True, soit False avec la raison de l'échec""" :return: soit True, soit False avec la raison de l'échec"""
if not user_request.has_perms(('bureau',)): if not user_request.has_perm('machines.change_ouvertureportlist'):
return False, u"Vous n'avez pas le droit d'éditer des ouvertures de port" return False, u"Vous n'avez pas le droit d'éditer des ouvertures de port"
return True, None return True, None
@ -1753,7 +1835,7 @@ class OuverturePortList(models.Model):
:param self: Instance ouvertureportlist à delete :param self: Instance ouvertureportlist à delete
:param user_request: Utilisateur qui fait la requête :param user_request: Utilisateur qui fait la requête
:return: soit True, soit False avec la raison de l'échec""" :return: soit True, soit False avec la raison de l'échec"""
if not user_request.has_perms(('bureau',)): if not user_request.has_perm('machines.delete_ouvertureportlist'):
return False, u"Vous n'avez pas le droit de supprimer une ouverture\ return False, u"Vous n'avez pas le droit de supprimer une ouverture\
de port" de port"
if self.interface_set.all(): if self.interface_set.all():
@ -1765,7 +1847,7 @@ class OuverturePortList(models.Model):
droit particulier cableur correspondant droit particulier cableur correspondant
:param user_request: instance user qui fait l'edition :param user_request: instance user qui fait l'edition
:return: True ou False avec la raison de l'échec le cas échéant""" :return: True ou False avec la raison de l'échec le cas échéant"""
return user_request.has_perms(('cableur',)), u"Vous n'avez pas le droit\ return user_request.has_perm('machines.view_ouvertureportlist'), u"Vous n'avez pas le droit\
de voir des ouverture de ports" de voir des ouverture de ports"
def can_view(self, user_request, *args, **kwargs): def can_view(self, user_request, *args, **kwargs):
@ -1774,7 +1856,7 @@ class OuverturePortList(models.Model):
:param self: instance ouvertureport à voir :param self: instance ouvertureport à voir
:param user_request: instance user qui fait l'edition :param user_request: instance user qui fait l'edition
:return: True ou False avec la raison de l'échec le cas échéant""" :return: True ou False avec la raison de l'échec le cas échéant"""
return user_request.has_perms(('cableur',)), u"Vous n'avez pas le droit\ return user_request.has_perm('machines.view_ouvertureportlist'), u"Vous n'avez pas le droit\
de voir des ouverture de ports" de voir des ouverture de ports"
def __str__(self): def __str__(self):
@ -1858,7 +1940,7 @@ class OuverturePort(models.Model):
une ouverture de port une ouverture de port
:param user_request: instance utilisateur qui fait la requête :param user_request: instance utilisateur qui fait la requête
:return: soit True, soit False avec la raison de l'échec""" :return: soit True, soit False avec la raison de l'échec"""
return user_request.has_perms(('bureau',)) , u"Vous n'avez pas le droit\ return user_request.has_perm('machines.add_ouvertureportlist') , u"Vous n'avez pas le droit\
d'ouvrir un port" d'ouvrir un port"
def can_edit(self, user_request, *args, **kwargs): def can_edit(self, user_request, *args, **kwargs):
@ -1867,7 +1949,7 @@ class OuverturePort(models.Model):
:param self: Instance ouvertureport à editer :param self: Instance ouvertureport à editer
:param user_request: Utilisateur qui fait la requête :param user_request: Utilisateur qui fait la requête
:return: soit True, soit False avec la raison de l'échec""" :return: soit True, soit False avec la raison de l'échec"""
if not user_request.has_perms(('bureau',)): if not user_request.has_perm('machines.change_ouvertureportlist'):
return False, u"Vous n'avez pas le droit d'éditer des ouvertures de port" return False, u"Vous n'avez pas le droit d'éditer des ouvertures de port"
return True, None return True, None
@ -1877,7 +1959,7 @@ class OuverturePort(models.Model):
:param self: Instance ouvertureport à delete :param self: Instance ouvertureport à delete
:param user_request: Utilisateur qui fait la requête :param user_request: Utilisateur qui fait la requête
:return: soit True, soit False avec la raison de l'échec""" :return: soit True, soit False avec la raison de l'échec"""
if not user_request.has_perms(('bureau',)): if not user_request.has_perm('machines.delete_ouvertureportlist'):
return False, u"Vous n'avez pas le droit d'éditer des ouvertures de port" return False, u"Vous n'avez pas le droit d'éditer des ouvertures de port"
return True, None return True, None
@ -1886,7 +1968,7 @@ class OuverturePort(models.Model):
droit particulier cableur correspondant droit particulier cableur correspondant
:param user_request: instance user qui fait l'edition :param user_request: instance user qui fait l'edition
:return: True ou False avec la raison de l'échec le cas échéant""" :return: True ou False avec la raison de l'échec le cas échéant"""
if not user_request.has_perms(('cableur',)): if not user_request.has_perm('machines.view_ouvertureportlist'):
return False, u"Vous n'avez pas le droit d'éditer des ouvertures de port" return False, u"Vous n'avez pas le droit d'éditer des ouvertures de port"
return True, None return True, None
@ -1896,7 +1978,7 @@ class OuverturePort(models.Model):
:param self: instance ouvertureport à voir :param self: instance ouvertureport à voir
:param user_request: instance user qui fait l'edition :param user_request: instance user qui fait l'edition
:return: True ou False avec la raison de l'échec le cas échéant""" :return: True ou False avec la raison de l'échec le cas échéant"""
if not user_request.has_perms(('cableur',)): if not user_request.has_perm('machines.view_ouvertureportlist'):
return False, u"Vous n'avez pas le droit d'éditer des ouvertures de port" return False, u"Vous n'avez pas le droit d'éditer des ouvertures de port"
return True, None return True, None