From ef1dbc882bb496cbac3ef98e290fb20b540efcee Mon Sep 17 00:00:00 2001 From: Gabriel Detraz Date: Wed, 28 Mar 2018 03:52:07 +0200 Subject: [PATCH] Poc de acl mixin, factorisation du code --- machines/models.py | 692 ++------------------------------------------- re2o/mixins.py | 72 +++++ 2 files changed, 88 insertions(+), 676 deletions(-) create mode 100644 re2o/mixins.py diff --git a/machines/models.py b/machines/models.py index 43906bab..de4c7311 100644 --- a/machines/models.py +++ b/machines/models.py @@ -39,6 +39,7 @@ from django.core.validators import MaxValueValidator from macaddress.fields import MACAddressField from re2o.field_permissions import FieldPermissionModelMixin +from re2o.mixins import AclMixin import users.models import preferences.models @@ -161,7 +162,7 @@ class Machine(FieldPermissionModelMixin, models.Model): return str(self.user) + ' - ' + str(self.id) + ' - ' + str(self.name) -class MachineType(models.Model): +class MachineType(AclMixin, models.Model): """ Type de machine, relié à un type d'ip, affecté aux interfaces""" PRETTY_NAME = "Type de machine" @@ -190,33 +191,6 @@ class MachineType(models.Model): :return: Une instance machinetype évidemment""" return MachineType.objects.get(pk=machinetypeid) - def can_create(user_request, *args, **kwargs): - """Verifie que l'user a les bons droits infra pour créer - un type de machine - :param user_request: Utilisateur qui fait la requête - :return: soit True, soit False avec la raison de l'échec""" - return user_request.has_perm('machines.add_machinetype'), u"Vous n'avez pas le droit\ - de créer un type de machine" - - def can_edit(self, user_request, *args, **kwargs): - """Verifie que l'user a les bons droits infra pour editer - cette instance type de machine - :param self: Instance machinetype à editer - :param user_request: Utilisateur qui fait la requête - :return: soit True, soit False avec la raison de l'échec""" - 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 True, None - - def can_delete(self, user_request, *args, **kwargs): - """Vérifie qu'on peut bien supprimer cette instance particulière (soit - machinetype de soi, soit droit particulier - :param self: instance machinetype à supprimer - :param user_request: instance user qui fait l'edition - :return: True ou False avec la raison de l'échec le cas échéant""" - 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 True, None def can_use_all(user_request, *args, **kwargs): """Check if an user can use every MachineType. @@ -231,28 +205,11 @@ class MachineType(models.Model): return False, u"Vous n'avez pas le droit d'utiliser tout types de machines" return True, None - def can_view_all(user_request, *args, **kwargs): - """Vérifie qu'on peut bien afficher l'ensemble des machinetype, - droit particulier correspondant - :param user_request: instance user qui fait l'edition - :return: True ou False avec la raison de l'échec le cas échéant""" - return user_request.has_perm('machines.view_machinetype'), u"Vous n'avez pas le droit\ - de voir les types de machines" - - def can_view(self, user_request, *args, **kwargs): - """Vérifie qu'on peut bien voir cette instance particulière avec - droit view objet - :param self: instance machinetype à voir - :param user_request: instance user qui fait l'edition - :return: True ou False avec la raison de l'échec le cas échéant""" - return user_request.has_perm('machines.view_machinetype'), u"Vous n'avez pas le droit\ - de voir les types de machines" - def __str__(self): return self.type -class IpType(models.Model): +class IpType(AclMixin, models.Model): """ Type d'ip, définissant un range d'ip, affecté aux machine types""" PRETTY_NAME = "Type d'ip" @@ -384,56 +341,11 @@ class IpType(models.Model): :return: True ou False avec la raison de l'échec le cas échéant""" return user_request.has_perm('machines.use_all_iptype'), None - - def can_create(user_request, *args, **kwargs): - """Verifie que l'user a les bons droits infra pour créer - un type d'ip - :param user_request: Utilisateur qui fait la requête - :return: soit True, soit False avec la raison de l'échec""" - return user_request.has_perm('machines.add_iptype'), u"Vous n'avez pas le droit\ - de créer un type d'ip" - - def can_edit(self, user_request, *args, **kwargs): - """Verifie que l'user a les bons droits infra pour editer - cette instance iptype - :param self: Instance iptype à editer - :param user_request: Utilisateur qui fait la requête - :return: soit True, soit False avec la raison de l'échec""" - 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 True, None - - def can_delete(self, user_request, *args, **kwargs): - """Verifie que l'user a les bons droits infra pour supprimer - cette instance iptype - :param self: Instance iptype à delete - :param user_request: Utilisateur qui fait la requête - :return: soit True, soit False avec la raison de l'échec""" - return user_request.has_perm('machines.delete_iptype'), u"Vous n'avez pas le droit\ - de supprimer un type d'ip" - - def can_view_all(user_request, *args, **kwargs): - """Vérifie qu'on peut bien afficher l'ensemble des iptype, - droit particulier view objet correspondant - :param user_request: instance user qui fait l'edition - :return: True ou False avec la raison de l'échec le cas échéant""" - return user_request.has_perm('machines.view_iptype'), u"Vous n'avez pas le droit\ - de voir les types d'ip" - - def can_view(self, user_request, *args, **kwargs): - """Vérifie qu'on peut bien voir cette instance particulière avec - droit view objet - :param self: instance iptype à voir - :param user_request: instance user qui fait l'edition - :return: True ou False avec la raison de l'échec le cas échéant""" - return user_request.has_perm('machines.view_iptype'), u"Vous n'avez pas le droit\ - de voir les types d'ip" - def __str__(self): return self.type -class Vlan(models.Model): +class Vlan(AclMixin, models.Model): """ Un vlan : vlan_id et nom On limite le vlan id entre 0 et 4096, comme défini par la norme""" PRETTY_NAME = "Vlans" @@ -453,55 +365,11 @@ class Vlan(models.Model): :return: Une instance vlan évidemment""" return Vlan.objects.get(pk=vlanid) - def can_create(user_request, *args, **kwargs): - """Verifie que l'user a les bons droits infra pour créer - un vlan - :param user_request: Utilisateur qui fait la requête - :return: soit True, soit False avec la raison de l'échec""" - return user_request.has_perm('machines.add_vlan'), u"Vous n'avez pas le droit\ - de créer un vlan" - - def can_edit(self, user_request, *args, **kwargs): - """Verifie que l'user a les bons droits infra pour editer - cette instance vlan - :param self: Instance vlan à editer - :param user_request: Utilisateur qui fait la requête - :return: soit True, soit False avec la raison de l'échec""" - if not user_request.has_perm('machines.change_vlan'): - return False, u"Vous n'avez pas le droit d'éditer des vlans" - return True, None - - def can_delete(self, user_request, *args, **kwargs): - """Verifie que l'user a les bons droits infra pour supprimer - cette instance vlan - :param self: Instance vlan à delete - :param user_request: Utilisateur qui fait la requête - :return: soit True, soit False avec la raison de l'échec""" - return user_request.has_perm('machines.delete_vlan'), u"Vous n'avez pas le droit\ - de suprimer un vlan" - - def can_view_all(user_request, *args, **kwargs): - """Vérifie qu'on peut bien afficher l'ensemble des vlan, - droit particulier view objet correspondant - :param user_request: instance user qui fait l'edition - :return: True ou False avec la raison de l'échec le cas échéant""" - return user_request.has_perm('machines.view_vlan'), u"Vous n'avez pas le droit\ - de voir les vlans" - - def can_view(self, user_request, *args, **kwargs): - """Vérifie qu'on peut bien voir cette instance particulière avec - droit view objet - :param self: instance vlan à voir - :param user_request: instance user qui fait l'edition - :return: True ou False avec la raison de l'échec le cas échéant""" - return user_request.has_perm('machines.view_vlan'), u"Vous n'avez pas le droit\ - de voir les vlans" - def __str__(self): return self.name -class Nas(models.Model): +class Nas(AclMixin, models.Model): """ Les nas. Associé à un machine_type. Permet aussi de régler le port_access_mode (802.1X ou mac-address) pour le radius. Champ autocapture de la mac à true ou false""" @@ -542,56 +410,11 @@ class Nas(models.Model): :return: Une instance nas évidemment""" return Nas.objects.get(pk=nasid) - def can_create(user_request, *args, **kwargs): - """Verifie que l'user a les bons droits infra pour créer - un nas - :param user_request: instance utilisateur qui fait la requête - :return: soit True, soit False avec la raison de l'échec""" - return user_request.has_perm('machines.add_nas'), u"Vous n'avez pas le droit\ - de créer un nas" - - def can_edit(self, user_request, *args, **kwargs): - """Verifie que l'user a les bons droits infra pour editer - cette instance nas - :param self: Instance nas à editer - :param user_request: Utilisateur qui fait la requête - :return: soit True, soit False avec la raison de l'échec""" - if not user_request.has_perm('machines.change_nas'): - return False, u"Vous n'avez pas le droit d'éditer des nas" - return True, None - - def can_delete(self, user_request, *args, **kwargs): - """Verifie que l'user a les bons droits infra pour supprimer - cette instance nas - :param self: Instance nas à delete - :param user_request: Utilisateur qui fait la requête - :return: soit True, soit False avec la raison de l'échec""" - return user_request.has_perm('machines.delete_nas'), u"Vous n'avez pas le droit\ - de supprimer un nas" - - def can_view_all(user_request, *args, **kwargs): - """Vérifie qu'on peut bien afficher l'ensemble des nas, - droit particulier view objet correspondant - - :param user_request: instance user qui fait l'edition - :return: True ou False avec la raison de l'échec le cas échéant""" - return user_request.has_perm('machines.view_nas'), u"Vous n'avez pas le droit\ - de voir les nas" - - def can_view(self, user_request, *args, **kwargs): - """Vérifie qu'on peut bien voir cette instance particulière avec - droit view objet - :param self: instance nas à voir - :param user_request: instance user qui fait l'edition - :return: True ou False avec la raison de l'échec le cas échéant""" - return user_request.has_perm('machines.view_nas'), u"Vous n'avez pas le droit\ - de voir les nas" - def __str__(self): return self.name -class SOA(models.Model): +class SOA(AclMixin, models.Model): """ Un enregistrement SOA associé à une extension Les valeurs par défault viennent des recommandations RIPE : @@ -634,50 +457,6 @@ class SOA(models.Model): :return: Une instance soa évidemment""" return SOA.objects.get(pk=soaid) - def can_create(user_request, *args, **kwargs): - """Verifie que l'user a les bons droits infra pour créer - un soa - :param user_request: instance utilisateur qui fait la requête - :return: soit True, soit False avec la raison de l'échec""" - return user_request.has_perm('machines.add_soa'), u"Vous n'avez pas le droit\ - de créer un enregistrement SOA" - - def can_edit(self, user_request, *args, **kwargs): - """Verifie que l'user a les bons droits infra pour editer - cette instance soa - :param self: Instance soa à editer - :param user_request: Utilisateur qui fait la requête - :return: soit True, soit False avec la raison de l'échec""" - if not user_request.has_perm('machines.change_soa'): - return False, u"Vous n'avez pas le droit d'éditer des enregistrements SOA" - return True, None - - def can_delete(self, user_request, *args, **kwargs): - """Verifie que l'user a les bons droits infra pour supprimer - cette instance soa - :param self: Instance soa à delete - :param user_request: Utilisateur qui fait la requête - :return: soit True, soit False avec la raison de l'échec""" - return user_request.has_perm('machines.delete_soa'), u"Vous n'avez pas le droit\ - de supprimer des enregistrements SOA" - - def can_view_all(user_request, *args, **kwargs): - """Vérifie qu'on peut bien afficher l'ensemble des soa, - droit particulier view objet correspondant - :param user_request: instance user qui fait l'edition - :return: True ou False avec la raison de l'échec le cas échéant""" - return user_request.has_perm('machines.view_soa'), u"Vous n'avez pas le droit\ - de voir les enreistrement SOA" - - def can_view(self, user_request, *args, **kwargs): - """Vérifie qu'on peut bien voir cette instance particulière avec - droit view objet - :param self: instance soa à voir - :param user_request: instance user qui fait l'edition - :return: True ou False avec la raison de l'échec le cas échéant""" - return user_request.has_perm('machines.view_soa'), u"Vous n'avez pas le droit\ - de voir les enreistrement SOA" - def __str__(self): return str(self.name) @@ -718,7 +497,7 @@ class SOA(models.Model): -class Extension(models.Model): +class Extension(AclMixin, models.Model): """ Extension dns type example.org. Précise si tout le monde peut l'utiliser, associé à un origin (ip d'origine)""" PRETTY_NAME = "Extensions dns" @@ -772,56 +551,12 @@ class Extension(models.Model): :return: Une instance extension évidemment""" return Extension.objects.get(pk=extensionid) - def can_create(user_request, *args, **kwargs): - """Verifie que l'user a les bons droits infra pour créer - une extension - :param user_request: instance utilisateur qui fait la requête - :return: soit True, soit False avec la raison de l'échec""" - return user_request.has_perm('machines.add_extension'), u"Vous n'avez pas le droit\ - de créer une extension" - - def can_edit(self, user_request, *args, **kwargs): - """Verifie que l'user a les bons droits infra pour editer - cette instance extension - :param self: Instance extension à editer - :param user_request: Utilisateur qui fait la requête - :return: soit True, soit False avec la raison de l'échec""" - if not user_request.has_perm('machines.change_extension'): - return False, u"Vous n'avez pas le droit d'éditer des extensions" - return True, None - - def can_delete(self, user_request, *args, **kwargs): - """Verifie que l'user a les bons droits infra pour supprimer - cette instance extension - :param self: Instance extension à delete - :param user_request: Utilisateur qui fait la requête - :return: soit True, soit False avec la raison de l'échec""" - return user_request.has_perm('machines.delete_extension'), u"Vous n'avez pas le droit\ - de supprimer des extension" - - def can_view_all(user_request, *args, **kwargs): - """Vérifie qu'on peut bien afficher l'ensemble des extension, - droit particulier view objet correspondant - :param user_request: instance user qui fait l'edition - :return: True ou False avec la raison de l'échec le cas échéant""" - return user_request.has_perm('machines.view_extension'), u"Vous n'avez pas le droit\ - de voir les extensions" - def can_use_all(user_request, *args, **kwargs): """Superdroit qui permet d'utiliser toutes les extensions sans restrictions :param user_request: instance user qui fait l'edition :return: True ou False avec la raison de l'échec le cas échéant""" return user_request.has_perm('machines.use_all_extension'), None - def can_view(self, user_request, *args, **kwargs): - """Vérifie qu'on peut bien voir cette instance particulière avec - droit view objet - :param self: instance extension à voir - :param user_request: instance user qui fait l'edition - :return: True ou False avec la raison de l'échec le cas échéant""" - return user_request.has_perm('machines.view_extension'), u"Vous n'avez pas le droit\ - de voir les extensions" - def __str__(self): return self.name @@ -831,7 +566,7 @@ class Extension(models.Model): super(Extension, self).clean(*args, **kwargs) -class Mx(models.Model): +class Mx(AclMixin, models.Model): """ Entrées des MX. Enregistre la zone (extension) associée et la priorité Todo : pouvoir associer un MX à une interface """ @@ -858,55 +593,11 @@ class Mx(models.Model): :return: Une instance mx évidemment""" return Mx.objects.get(pk=mxid) - def can_create(user_request, *args, **kwargs): - """Verifie que l'user a les bons droits infra pour créer - un mx - :param user_request: instance utilisateur qui fait la requête - :return: soit True, soit False avec la raison de l'échec""" - return user_request.has_perm('machines.add_mx'), u"Vous n'avez pas le droit\ - de créer un enregistrement MX" - - def can_edit(self, user_request, *args, **kwargs): - """Verifie que l'user a les bons droits infra pour editer - cette instance mx - :param self: Instance mx à editer - :param user_request: Utilisateur qui fait la requête - :return: soit True, soit False avec la raison de l'échec""" - if not user_request.has_perm('machines.change_mx'): - return False, u"Vous n'avez pas le droit d'éditer des enregstrements MX" - return True, None - - def can_delete(self, user_request, *args, **kwargs): - """Verifie que l'user a les bons droits infra pour del - cette instance mx - :param self: Instance mx à delete - :param user_request: Utilisateur qui fait la requête - :return: soit True, soit False avec la raison de l'échec""" - return user_request.has_perm('machines.delete_mx'), u"Vous n'avez pas le droit\ - de supprimer un enregistrement MX" - - def can_view_all(user_request, *args, **kwargs): - """Vérifie qu'on peut bien afficher l'ensemble des mx, - droit particulier view objet correspondant - :param user_request: instance user qui fait l'edition - :return: True ou False avec la raison de l'échec le cas échéant""" - return user_request.has_perm('machines.view_mx'), u"Vous n'avez pas le droit\ - de voir les enregistrements MX" - - def can_view(self, user_request, *args, **kwargs): - """Vérifie qu'on peut bien voir cette instance particulière avec - droit view objet - :param self: instance mx à voir - :param user_request: instance user qui fait l'edition - :return: True ou False avec la raison de l'échec le cas échéant""" - return user_request.has_perm('machines.view_mx'), u"Vous n'avez pas le droit\ - de voir les enregistrements MX" - def __str__(self): return str(self.zone) + ' ' + str(self.priority) + ' ' + str(self.name) -class Ns(models.Model): +class Ns(AclMixin, models.Model): """Liste des enregistrements name servers par zone considéérée""" PRETTY_NAME = "Enregistrements NS" @@ -929,55 +620,11 @@ class Ns(models.Model): :return: Une instance ns évidemment""" return Ns.objects.get(pk=nsid) - def can_create(user_request, *args, **kwargs): - """Verifie que l'user a les bons droits infra pour créer - un ns - :param user_request: instance utilisateur qui fait la requête - :return: soit True, soit False avec la raison de l'échec""" - return user_request.has_perm('machines.add_ns'), u"Vous n'avez pas le droit\ - de créer un enregistrement NS" - - def can_edit(self, user_request, *args, **kwargs): - """Verifie que l'user a les bons droits infra pour editer - cette instance ns - :param self: Instance ns à editer - :param user_request: Utilisateur qui fait la requête - :return: soit True, soit False avec la raison de l'échec""" - if not user_request.has_perm('machines.change_ns'): - return False, u"Vous n'avez pas le droit d'éditer des enregistrements NS" - return True, None - - def can_delete(self, user_request, *args, **kwargs): - """Verifie que l'user a les bons droits infra pour del - cette instance ns - :param self: Instance ns à delete - :param user_request: Utilisateur qui fait la requête - :return: soit True, soit False avec la raison de l'échec""" - return user_request.has_perm('machines.del_ns'), u"Vous n'avez pas le droit\ - de supprimer un enregistrement NS" - - def can_view_all(user_request, *args, **kwargs): - """Vérifie qu'on peut bien afficher l'ensemble des ns, - droit particulier view objet correspondant - :param user_request: instance user qui fait l'edition - :return: True ou False avec la raison de l'échec le cas échéant""" - return user_request.has_perm('machines.view_ns'), u"Vous n'avez pas le droit\ - de voir les enregistrements NS" - - def can_view(self, user_request, *args, **kwargs): - """Vérifie qu'on peut bien voir cette instance particulière avec - droit view objet - :param self: instance ns à voir - :param user_request: instance user qui fait l'edition - :return: True ou False avec la raison de l'échec le cas échéant""" - return user_request.has_perm('machines.view_ns'), u"Vous n'avez pas le droit\ - de voir les enregistrements NS" - def __str__(self): return str(self.zone) + ' ' + str(self.ns) -class Txt(models.Model): +class Txt(AclMixin, models.Model): """ Un enregistrement TXT associé à une extension""" PRETTY_NAME = "Enregistrement TXT" @@ -996,50 +643,6 @@ class Txt(models.Model): :return: Une instance txt évidemment""" return Txt.objects.get(pk=txtid) - def can_create(user_request, *args, **kwargs): - """Verifie que l'user a les bons droits infra pour créer - un txt - :param user_request: instance utilisateur qui fait la requête - :return: soit True, soit False avec la raison de l'échec""" - return user_request.has_perm('machines.add_txt'), u"Vous n'avez pas le droit\ - de créer un enregistrement TXT" - - def can_edit(self, user_request, *args, **kwargs): - """Verifie que l'user a les bons droits infra pour editer - cette instance txt - :param self: Instance txt à editer - :param user_request: Utilisateur qui fait la requête - :return: soit True, soit False avec la raison de l'échec""" - if not user_request.has_perm('machines.change_txt'): - return False, u"Vous n'avez pas le droit d'éditer des enregistrement TXT" - return True, None - - def can_delete(self, user_request, *args, **kwargs): - """Verifie que l'user a les bons droits infra pour del - cette instance txt - :param self: Instance txt à delete - :param user_request: Utilisateur qui fait la requête - :return: soit True, soit False avec la raison de l'échec""" - return user_request.has_perm('machines.delete_txt'), u"Vous n'avez pas le droit\ - de supprimer des enregistrements TXT" - - def can_view_all(user_request, *args, **kwargs): - """Vérifie qu'on peut bien afficher l'ensemble des txt, - droit particulier view objet correspondant - :param user_request: instance user qui fait l'edition - :return: True ou False avec la raison de l'échec le cas échéant""" - return user_request.has_perm('machines.view_txt'), u"Vous n'avez pas le droit\ - de voir les enregistrements TXT" - - def can_view(self, user_request, *args, **kwargs): - """Vérifie qu'on peut bien voir cette instance particulière avec - droit view objet - :param self: instance txt à voir - :param user_request: instance user qui fait l'edition - :return: True ou False avec la raison de l'échec le cas échéant""" - return user_request.has_perm('machines.view_txt'), u"Vous n'avez pas le droit\ - de voir les enregistrements TXT" - def __str__(self): return str(self.zone) + " : " + str(self.field1) + " " +\ str(self.field2) @@ -1050,7 +653,7 @@ class Txt(models.Model): return str(self.field1).ljust(15) + " IN TXT " + str(self.field2) -class Srv(models.Model): +class Srv(AclMixin, models.Model): PRETTY_NAME = "Enregistrement Srv" TCP = 'TCP' @@ -1104,50 +707,6 @@ class Srv(models.Model): :return: Une instance srv évidemment""" return Srv.objects.get(pk=srvid) - def can_create(user_request, *args, **kwargs): - """Verifie que l'user a les bons droits infra pour créer - un srv - :param user_request: instance utilisateur qui fait la requête - :return: soit True, soit False avec la raison de l'échec""" - return user_request.has_perm('machines.add_soa'), u"Vous n'avez pas le droit\ - de créer un enregistrement SRV" - - def can_edit(self, user_request, *args, **kwargs): - """Verifie que l'user a les bons droits infra pour editer - cette instance srv - :param self: Instance srv à editer - :param user_request: Utilisateur qui fait la requête - :return: soit True, soit False avec la raison de l'échec""" - if not user_request.has_perm('machines.change_soa'): - return False, u"Vous n'avez pas le droit d'éditer des enregistrements SRV" - return True, None - - def can_delete(self, user_request, *args, **kwargs): - """Verifie que l'user a les bons droits infra pour del - cette instance srv - :param self: Instance srv à delete - :param user_request: Utilisateur qui fait la requête - :return: soit True, soit False avec la raison de l'échec""" - return user_request.has_perm('machines.delete_soa'), u"Vous n'avez pas le droit\ - de supprimer un enregistrement SRV" - - def can_view_all(user_request, *args, **kwargs): - """Vérifie qu'on peut bien afficher l'ensemble des srv, - droit particulier view objet correspondant - :param user_request: instance user qui fait l'edition - :return: True ou False avec la raison de l'échec le cas échéant""" - return user_request.has_perm('machines.view_soa'), u"Vous n'avez pas le droit\ - de voir les enregistrements SRV" - - def can_view(self, user_request, *args, **kwargs): - """Vérifie qu'on peut bien voir cette instance particulière avec - droit view objet - :param self: instance srv à voir - :param user_request: instance user qui fait l'edition - :return: True ou False avec la raison de l'échec le cas échéant""" - return user_request.has_perm('machines.view_soa'), u"Vous n'avez pas le droit\ - de voir les enregistrements SRV" - def __str__(self): return str(self.service) + ' ' + str(self.protocole) + ' ' +\ str(self.extension) + ' ' + str(self.priority) +\ @@ -1719,7 +1278,7 @@ class Domain(models.Model): return str(self.name) + str(self.extension) -class IpList(models.Model): +class IpList(AclMixin, models.Model): PRETTY_NAME = "Addresses ipv4" ipv4 = models.GenericIPAddressField(protocol='IPv4', unique=True) @@ -1753,58 +1312,11 @@ class IpList(models.Model): :return: Une instance iplist évidemment""" return IpList.objects.get(pk=iplistid) - def can_create(user_request, *args, **kwargs): - """Verifie que l'user a les bons droits infra pour créer - une ip - :param user_request: instance utilisateur qui fait la requête - :return: soit True, soit False avec la raison de l'échec""" - return user_request.has_perm('machines.add_iplist'), u"Vous n'avez pas le droit\ - de créer une ip" - - def can_edit(self, user_request, *args, **kwargs): - """Verifie que l'user a les bons droits infra pour editer - cette instance ip - :param self: Instance ip à editer - :param user_request: Utilisateur qui fait la requête - :return: soit True, soit False avec la raison de l'échec""" - if not user_request.has_perm('machines.change_iplist'): - return False, u"Vous n'avez pas le droit d'éditer des enregistrements ip" - return True, None - - def can_delete(self, user_request, *args, **kwargs): - """Verifie que l'user a les bons droits infra pour delete - cette instance ip - :param self: Instance ip à delete - :param user_request: Utilisateur qui fait la requête - :return: soit True, soit False avec la raison de l'échec""" - if not user_request.has_perm('machines.delete_iplist'): - return False, u"Vous n'avez pas le droit d'éditer des enregistrements ip" - return True, None - - def can_view_all(user_request, *args, **kwargs): - """Vérifie qu'on peut bien afficher l'ensemble des ip, - droit particulier view objet correspondant - :param user_request: instance user qui fait l'edition - :return: True ou False avec la raison de l'échec le cas échéant""" - if not user_request.has_perm('machines.view_iplist'): - return False, u"Vous n'avez pas le droit de voir des enregistrements ip" - return True, None - - def can_view(self, user_request, *args, **kwargs): - """Vérifie qu'on peut bien voir cette instance particulière avec - droit infra - :param self: instance iplist à voir - :param user_request: instance user qui fait l'edition - :return: True ou False avec la raison de l'échec le cas échéant""" - if not user_request.has_perm('machines.view_iplist'): - return False, u"Vous n'avez pas le droit de voir des enregistrements ip" - return True, None - def __str__(self): return self.ipv4 -class Service(models.Model): +class Service(AclMixin, models.Model): """ Definition d'un service (dhcp, dns, etc)""" PRETTY_NAME = "Services à générer (dhcp, dns, etc)" @@ -1851,50 +1363,6 @@ class Service(models.Model): :return: Une instance service évidemment""" return Service.objects.get(pk=serviceid) - def can_create(user_request, *args, **kwargs): - """Verifie que l'user a les bons droits infra pour créer - un service - :param user_request: instance utilisateur qui fait la requête - :return: soit True, soit False avec la raison de l'échec""" - return user_request.has_perm('machines.add_service'), u"Vous n'avez pas le droit\ - de créer un service" - - def can_edit(self, user_request, *args, **kwargs): - """Verifie que l'user a les bons droits infra pour editer - cette instance service - :param self: Instance service à editer - :param user_request: Utilisateur qui fait la requête - :return: soit True, soit False avec la raison de l'échec""" - if not user_request.has_perm('machines.change_service'): - return False, u"Vous n'avez pas le droit d'éditer des services" - return True, None - - def can_delete(self, user_request, *args, **kwargs): - """Verifie que l'user a les bons droits infra pour delete - cette instance service - :param self: Instance service à delete - :param user_request: Utilisateur qui fait la requête - :return: soit True, soit False avec la raison de l'échec""" - return user_request.has_perm('machines.delete_service'), u"Vous n'avez pas le droit\ - de supprimer un service" - - def can_view_all(user_request, *args, **kwargs): - """Vérifie qu'on peut bien afficher l'ensemble des services, - droit particulier view objet correspondant - :param user_request: instance user qui fait l'edition - :return: True ou False avec la raison de l'échec le cas échéant""" - return user_request.has_perm('machines.view_service'), u"Vous n'avez pas le droit\ - de voir des services" - - def can_view(self, user_request, *args, **kwargs): - """Vérifie qu'on peut bien voir cette instance particulière avec - droit view objet - :param self: instance service à voir - :param user_request: instance user qui fait l'edition - :return: True ou False avec la raison de l'échec le cas échéant""" - return user_request.has_perm('machines.view_service'), u"Vous n'avez pas le droit\ - de voir des services" - def __str__(self): return str(self.service_type) @@ -1908,7 +1376,7 @@ def regen(service): return -class Service_link(models.Model): +class Service_link(AclMixin, models.Model): """ Definition du lien entre serveurs et services""" PRETTY_NAME = "Relation entre service et serveur" @@ -1941,56 +1409,11 @@ class Service_link(models.Model): :return: Une instance servicelink évidemment""" return ServiceLink.objects.get(pk=servicelinkid) - def can_create(user_request, *args, **kwargs): - """Verifie que l'user a les bons droits infra pour créer - un servicelink - :param user_request: instance utilisateur qui fait la requête - :return: soit True, soit False avec la raison de l'échec""" - return user_request.has_perm('machines.add_service'), u"Vous n'avez pas le droit\ - de créer un service" - - def can_edit(self, user_request, *args, **kwargs): - """Verifie que l'user a les bons droits infra pour editer - cette instance servicelink - :param self: Instance servicelink à editer - :param user_request: Utilisateur qui fait la requête - :return: soit True, soit False avec la raison de l'échec""" - if not user_request.has_perm('machines.change_service'): - return False, u"Vous n'avez pas le droit d'éditer des services" - return True, None - - def can_delete(self, user_request, *args, **kwargs): - """Verifie que l'user a les bons droits infra pour delete - cette instance servicelink - :param self: Instance servicelink à delete - :param user_request: Utilisateur qui fait la requête - :return: soit True, soit False avec la raison de l'échec""" - if not user_request.has_perm('machines.delete_service'): - return False, u"Vous n'avez pas le droit d'éditer des services" - return True, None - - def can_view_all(user_request, *args, **kwargs): - """Vérifie qu'on peut bien afficher l'ensemble des services, - droit particulier view objet correspondant - :param user_request: instance user qui fait l'edition - :return: True ou False avec la raison de l'échec le cas échéant""" - return user_request.has_perm('machines.view_service'), u"Vous n'avez pas le droit\ - de voir des liens de services" - - def can_view(self, user_request, *args, **kwargs): - """Vérifie qu'on peut bien voir cette instance particulière avec - droit view objet - :param self: instance service à voir - :param user_request: instance user qui fait l'edition - :return: True ou False avec la raison de l'échec le cas échéant""" - return user_request.has_perm('machines.view_service'), u"Vous n'avez pas le droit\ - de voir des liens de services" - def __str__(self): return str(self.server) + " " + str(self.service) -class OuverturePortList(models.Model): +class OuverturePortList(AclMixin, models.Model): """Liste des ports ouverts sur une interface.""" PRETTY_NAME = "Profil d'ouverture de ports" @@ -2010,24 +1433,6 @@ class OuverturePortList(models.Model): :return: Une instance ouvertureportlist évidemment""" return OuverturePortList.objects.get(pk=ouvertureportlistid) - def can_create(user_request, *args, **kwargs): - """Verifie que l'user a les bons droits bureau pour créer - une ouverture de port - :param user_request: instance utilisateur qui fait la requête - :return: soit True, soit False avec la raison de l'échec""" - return user_request.has_perm('machines.add_ouvertureportlist') , u"Vous n'avez pas le droit\ - d'ouvrir un port" - - def can_edit(self, user_request, *args, **kwargs): - """Verifie que l'user a les bons droits bureau pour editer - cette instance ouvertureportlist - :param self: Instance ouvertureportlist à editer - :param user_request: Utilisateur qui fait la requête - :return: soit True, soit False avec la raison de l'échec""" - 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 True, None - def can_delete(self, user_request, *args, **kwargs): """Verifie que l'user a les bons droits bureau pour delete cette instance ouvertureportlist @@ -2041,23 +1446,6 @@ class OuverturePortList(models.Model): return False, u"Cette liste de ports est utilisée" return True, None - def can_view_all(user_request, *args, **kwargs): - """Vérifie qu'on peut bien afficher l'ensemble des ouvertureport, - droit particulier view objet correspondant - :param user_request: instance user qui fait l'edition - :return: True ou False avec la raison de l'échec le cas échéant""" - return user_request.has_perm('machines.view_ouvertureportlist'), u"Vous n'avez pas le droit\ - de voir des ouverture de ports" - - def can_view(self, user_request, *args, **kwargs): - """Vérifie qu'on peut bien voir cette instance particulière avec - droit view objet - :param self: instance ouvertureport à voir - :param user_request: instance user qui fait l'edition - :return: True ou False avec la raison de l'échec le cas échéant""" - return user_request.has_perm('machines.view_ouvertureportlist'), u"Vous n'avez pas le droit\ - de voir des ouverture de ports" - def __str__(self): return self.name @@ -2090,7 +1478,7 @@ class OuverturePortList(models.Model): ) -class OuverturePort(models.Model): +class OuverturePort(AclMixin, models.Model): """ Représente un simple port ou une plage de ports. @@ -2134,54 +1522,6 @@ class OuverturePort(models.Model): :return: Une instance ouvertureport évidemment""" return OuverturePort.objects.get(pk=ouvertureportid) - def can_create(user_request, *args, **kwargs): - """Verifie que l'user a les bons droits bureau pour créer - une ouverture de port - :param user_request: instance utilisateur qui fait la requête - :return: soit True, soit False avec la raison de l'échec""" - return user_request.has_perm('machines.add_ouvertureportlist') , u"Vous n'avez pas le droit\ - d'ouvrir un port" - - def can_edit(self, user_request, *args, **kwargs): - """Verifie que l'user a les bons droits bureau pour editer - cette instance ouvertureport - :param self: Instance ouvertureport à editer - :param user_request: Utilisateur qui fait la requête - :return: soit True, soit False avec la raison de l'échec""" - 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 True, None - - def can_delete(self, user_request, *args, **kwargs): - """Verifie que l'user a les bons droits bureau pour delete - cette instance ouvertureport - :param self: Instance ouvertureport à delete - :param user_request: Utilisateur qui fait la requête - :return: soit True, soit False avec la raison de l'échec""" - 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 True, None - - def can_view_all(user_request, *args, **kwargs): - """Vérifie qu'on peut bien afficher l'ensemble des ouvertureport, - droit particulier view objet correspondant - :param user_request: instance user qui fait l'edition - :return: True ou False avec la raison de l'échec le cas échéant""" - 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 True, None - - def can_view(self, user_request, *args, **kwargs): - """Vérifie qu'on peut bien voir cette instance particulière avec - droit view objet - :param self: instance ouvertureport à voir - :param user_request: instance user qui fait l'edition - :return: True ou False avec la raison de l'échec le cas échéant""" - 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 True, None - - def __str__(self): if self.begin == self.end: return str(self.begin) diff --git a/re2o/mixins.py b/re2o/mixins.py new file mode 100644 index 00000000..09fee806 --- /dev/null +++ b/re2o/mixins.py @@ -0,0 +1,72 @@ +# -*- mode: python; coding: utf-8 -*- +# Re2o est un logiciel d'administration développé initiallement au rezometz. Il +# se veut agnostique au réseau considéré, de manière à être installable en +# quelques clics. +# +# Copyright © 2017 Gabriel Détraz +# Copyright © 2017 Goulven Kermarec +# Copyright © 2017 Augustin Lemesle +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +class AclMixin(object): + @classmethod + def get_classname(cls): + return str(cls.__name__).lower() + + @classmethod + def get_modulename(cls): + return str(cls.__module__).split('.')[0].lower() + + @classmethod + def can_create(cls, user_request, *args, **kwargs): + """Verifie que l'user a les bons droits infra pour créer + un servicelink + :param user_request: instance utilisateur qui fait la requête + :return: soit True, soit False avec la raison de l'échec""" + return user_request.has_perm(cls.get_modulename() + '.add_' + cls.get_classname()), u"Vous n'avez pas le droit\ + de créer un " + cls.get_classname() + + def can_edit(self, user_request, *args, **kwargs): + """Verifie que l'user a les bons droits infra pour editer + cette instance servicelink + :param self: Instance servicelink à editer + :param user_request: Utilisateur qui fait la requête + :return: soit True, soit False avec la raison de l'échec""" + return user_request.has_perm(self.get_modulename() + '.change_' + self.get_classname()), u"Vous n'avez pas le droit d'éditer des " + self.get_classname() + + def can_delete(self, user_request, *args, **kwargs): + """Verifie que l'user a les bons droits infra pour delete + cette instance servicelink + :param self: Instance servicelink à delete + :param user_request: Utilisateur qui fait la requête + :return: soit True, soit False avec la raison de l'échec""" + return user_request.has_perm(self.get_modulename() + '.delete_' + self.get_classname()), u"Vous n'avez pas le droit d'éditer des " + self.get_classname() + + @classmethod + def can_view_all(cls, user_request, *args, **kwargs): + """Vérifie qu'on peut bien afficher l'ensemble des services, + droit particulier view objet correspondant + :param user_request: instance user qui fait l'edition + :return: True ou False avec la raison de l'échec le cas échéant""" + return user_request.has_perm(cls.get_modulename() + '.view_' + cls.get_classname()), u"Vous n'avez pas le droit de voir des " + cls.get_classname() + + def can_view(self, user_request, *args, **kwargs): + """Vérifie qu'on peut bien voir cette instance particulière avec + droit view objet + :param self: instance service à voir + :param user_request: instance user qui fait l'edition + :return: True ou False avec la raison de l'échec le cas échéant""" + return user_request.has_perm(self.get_modulename() + '.view_' + self.get_classname()), u"Vous n'avez pas le droit de voir des " + self.get_classname()