diff --git a/api/__init__.py b/api/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/cotisations/models.py b/cotisations/models.py index 11df1712..cbf44b79 100644 --- a/cotisations/models.py +++ b/cotisations/models.py @@ -57,9 +57,9 @@ from django.utils import timezone from machines.models import regen from re2o.field_permissions import FieldPermissionModelMixin +from re2o.mixins import AclMixin - -class Facture(FieldPermissionModelMixin, models.Model): +class Facture(AclMixin, FieldPermissionModelMixin, models.Model): """ Définition du modèle des factures. Une facture regroupe une ou plusieurs ventes, rattachée à un user, et reliée à un moyen de paiement et si il y a lieu un numero pour les chèques. Possède les valeurs @@ -114,13 +114,6 @@ class Facture(FieldPermissionModelMixin, models.Model): ).values_list('name', flat=True)) return name - def get_instance(factureid, *args, **kwargs): - return Facture.objects.get(pk=factureid) - - def can_create(user_request, *args, **kwargs): - return user_request.has_perm('cotisations.add_facture'), u"Vous n'avez pas le\ - droit de créer des factures" - def can_edit(self, user_request, *args, **kwargs): if not user_request.has_perm('cotisations.change_facture'): return False, u"Vous n'avez pas le droit d'éditer les factures" @@ -144,11 +137,6 @@ class Facture(FieldPermissionModelMixin, models.Model): else: return True, None - def can_view_all(user_request, *args, **kwargs): - if not user_request.has_perm('cotisations.view_facture'): - return False, u"Vous n'avez pas le droit de voir les factures" - return True, None - def can_view(self, user_request, *args, **kwargs): if not user_request.has_perm('cotisations.view_facture') and\ self.user != user_request: @@ -192,7 +180,7 @@ def facture_post_delete(sender, **kwargs): user.ldap_sync(base=False, access_refresh=True, mac_refresh=False) -class Vente(models.Model): +class Vente(AclMixin, models.Model): """Objet vente, contient une quantité, une facture parente, un nom, un prix. Peut-être relié à un objet cotisation, via le boolean iscotisation""" @@ -277,14 +265,6 @@ class Vente(models.Model): self.update_cotisation() super(Vente, self).save(*args, **kwargs) - def get_instance(venteid, *args, **kwargs): - return Vente.objects.get(pk=venteid) - - def can_create(user_request, *args, **kwargs): - return user_request.has_perm('cotisations.add_vente'), u"Vous n'avez pas le\ - droit de créer des ventes" - return True, None - def can_edit(self, user_request, *args, **kwargs): if not user_request.has_perm('cotisations.change_vente'): return False, u"Vous n'avez pas le droit d'éditer les ventes" @@ -308,11 +288,6 @@ class Vente(models.Model): else: return True, None - def can_view_all(user_request, *args, **kwargs): - if not user_request.has_perm('cotisations.view_vente'): - return False, u"Vous n'avez pas le droit de voir les ventes" - return True, None - def can_view(self, user_request, *args, **kwargs): if not user_request.has_perm('cotisations.view_vente') and\ self.facture.user != user_request: @@ -350,7 +325,7 @@ def vente_post_delete(sender, **kwargs): user.ldap_sync(base=False, access_refresh=True, mac_refresh=False) -class Article(models.Model): +class Article(AclMixin, models.Model): """Liste des articles en vente : prix, nom, et attribut iscotisation et duree si c'est une cotisation""" PRETTY_NAME = "Articles en vente" @@ -402,34 +377,11 @@ class Article(models.Model): "La durée est obligatoire si il s'agit d'une cotisation" ) - def get_instance(articleid, *args, **kwargs): - return Article.objects.get(pk=articleid) - - def can_create(user_request, *args, **kwargs): - return user_request.has_perm('cotisations.add_article'), u"Vous n'avez pas le\ - droit d'ajouter des articles" - - def can_edit(self, user_request, *args, **kwargs): - return user_request.has_perm('cotisations.change_article'), u"Vous n'avez pas le\ - droit d'éditer des articles" - - def can_delete(self, user_request, *args, **kwargs): - return user_request.has_perm('cotisations.delete_article'), u"Vous n'avez pas le\ - droit de supprimer des articles" - - def can_view_all(user_request, *args, **kwargs): - return user_request.has_perm('cotisations.view_article'), u"Vous n'avez pas le\ - droit de voir des articles" - - def can_view(self, user_request, *args, **kwargs): - return user_request.has_perm('cotisations.view_article'), u"Vous n'avez pas le\ - droit de voir des articles" - def __str__(self): return self.name -class Banque(models.Model): +class Banque(AclMixin, models.Model): """Liste des banques""" PRETTY_NAME = "Banques enregistrées" @@ -440,34 +392,11 @@ class Banque(models.Model): ("view_banque", "Peut voir un objet banque"), ) - def get_instance(banqueid, *args, **kwargs): - return Banque.objects.get(pk=banqueid) - - def can_create(user_request, *args, **kwargs): - return user_request.has_perm('cotisations.add_banque'), u"Vous n'avez pas le\ - droit d'ajouter des banques" - - def can_edit(self, user_request, *args, **kwargs): - return user_request.has_perm('cotisations.change_banque'), u"Vous n'avez pas le\ - droit d'éditer des banques" - - def can_delete(self, user_request, *args, **kwargs): - return user_request.has_perm('cotisations.delete_banque'), u"Vous n'avez pas le\ - droit de supprimer des banques" - - def can_view_all(user_request, *args, **kwargs): - return user_request.has_perm('cotisations.view_banque'), u"Vous n'avez pas le\ - droit de voir des banques" - - def can_view(self, user_request, *args, **kwargs): - return user_request.has_perm('cotisations.view_banque'), u"Vous n'avez pas le\ - droit de voir des banques" - def __str__(self): return self.name -class Paiement(models.Model): +class Paiement(AclMixin, models.Model): """Moyens de paiement""" PRETTY_NAME = "Moyens de paiement" PAYMENT_TYPES = ( @@ -483,29 +412,6 @@ class Paiement(models.Model): ("view_paiement", "Peut voir un objet paiement"), ) - def get_instance(paiementid, *args, **kwargs): - return Paiement.objects.get(pk=paiementid) - - def can_create(user_request, *args, **kwargs): - return user_request.has_perm('cotisations.add_paiement'), u"Vous n'avez pas le\ - droit d'ajouter des paiements" - - def can_edit(self, user_request, *args, **kwargs): - return user_request.has_perm('cotisations.change_paiement'), u"Vous n'avez pas le\ - droit d'éditer des paiements" - - def can_delete(self, user_request, *args, **kwargs): - return user_request.has_perm('cotisations.delete_paiement'), u"Vous n'avez pas le\ - droit de supprimer des paiements" - - def can_view_all(user_request, *args, **kwargs): - return user_request.has_perm('cotisations.view_paiement'), u"Vous n'avez pas le\ - droit de voir des paiements" - - def can_view(self, user_request, *args, **kwargs): - return user_request.has_perm('cotisations.view_paiement'), u"Vous n'avez pas le\ - droit de voir des paiements" - def __str__(self): return self.moyen @@ -520,7 +426,7 @@ class Paiement(models.Model): super(Paiement, self).save(*args, **kwargs) -class Cotisation(models.Model): +class Cotisation(AclMixin, models.Model): """Objet cotisation, debut et fin, relié en onetoone à une vente""" PRETTY_NAME = "Cotisations" @@ -545,14 +451,6 @@ class Cotisation(models.Model): ("change_all_cotisation", "Superdroit, peut modifier toutes les cotisations"), ) - def get_instance(cotisationid, *args, **kwargs): - return Cotisations.objects.get(pk=cotisationid) - - def can_create(user_request, *args, **kwargs): - return user_request.has_perm('cotisations.add_cotisation'), u"Vous n'avez pas le\ - droit de créer des cotisations" - return True, None - def can_edit(self, user_request, *args, **kwargs): if not user_request.has_perm('cotisations.change_cotisation'): return False, u"Vous n'avez pas le droit d'éditer les cotisations" @@ -572,11 +470,6 @@ class Cotisation(models.Model): else: return True, None - def can_view_all(user_request, *args, **kwargs): - if not user_request.has_perm('cotisations.view_cotisation'): - return False, u"Vous n'avez pas le droit de voir les cotisations" - return True, None - def can_view(self, user_request, *args, **kwargs): if not user_request.has_perm('cotisations.view_cotisation') and\ self.vente.facture.user != user_request: diff --git a/logs/views.py b/logs/views.py index 6ab48706..5dd87eaa 100644 --- a/logs/views.py +++ b/logs/views.py @@ -90,7 +90,8 @@ from topologie.models import ( Room, Stack, ModelSwitch, - ConstructorSwitch + ConstructorSwitch, + AccessPoint ) from preferences.models import GeneralOption from re2o.views import form @@ -360,6 +361,7 @@ def stats_models(request): }, 'Topologie': { 'switch': [Switch.PRETTY_NAME, Switch.objects.count()], + 'bornes': [AccessPoint.PRETTY_NAME, AccessPoint.objects.count()], 'port': [Port.PRETTY_NAME, Port.objects.count()], 'chambre': [Room.PRETTY_NAME, Room.objects.count()], 'stack': [Stack.PRETTY_NAME, Stack.objects.count()], diff --git a/machines/admin.py b/machines/admin.py index e6165672..9a2d5133 100644 --- a/machines/admin.py +++ b/machines/admin.py @@ -38,6 +38,7 @@ from .models import ( Nas, Service, OuverturePort, + Ipv6List, OuverturePortList ) @@ -46,6 +47,10 @@ class MachineAdmin(VersionAdmin): pass +class Ipv6ListAdmin(VersionAdmin): + pass + + class IpTypeAdmin(VersionAdmin): pass @@ -124,6 +129,7 @@ admin.site.register(Interface, InterfaceAdmin) admin.site.register(Domain, DomainAdmin) admin.site.register(Service, ServiceAdmin) admin.site.register(Vlan, VlanAdmin) +admin.site.register(Ipv6List, Ipv6ListAdmin) admin.site.register(Nas, NasAdmin) admin.site.register(OuverturePort, OuverturePortAdmin) admin.site.register(OuverturePortList, OuverturePortListAdmin) diff --git a/machines/models.py b/machines/models.py index 43906bab..d4368b2e 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 @@ -65,9 +66,10 @@ class Machine(FieldPermissionModelMixin, models.Model): ) def get_instance(machineid, *args, **kwargs): - """Récupère une instance - :param machineid: Instance id à trouver - :return: Une instance machine évidemment""" + """Get the Machine instance with machineid. + :param userid: The id + :return: The user + """ return Machine.objects.get(pk=machineid) @staticmethod @@ -84,6 +86,15 @@ class Machine(FieldPermissionModelMixin, models.Model): """ return user_request.has_perm('machines.change_machine_user'), "Vous ne pouvez pas modifier l'utilisateur de la machine." + def can_view_all(user_request, *args, **kwargs): + """Vérifie qu'on peut bien afficher l'ensemble des machines, + 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""" + if not user_request.has_perm('machines.view_machine'): + return False, u"Vous ne pouvez pas afficher l'ensemble des machines sans permission" + return True, None + def can_create(user_request, userid, *args, **kwargs): """Vérifie qu'un user qui fait la requète peut bien créer la machine et n'a pas atteint son quota, et crée bien une machine à lui @@ -131,15 +142,6 @@ class Machine(FieldPermissionModelMixin, models.Model): d'un autre user que vous sans droit" return True, None - def can_view_all(user_request, *args, **kwargs): - """Vérifie qu'on peut bien afficher l'ensemble des machines, - 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""" - if not user_request.has_perm('machines.view_machine'): - return False, u"Vous ne pouvez pas afficher l'ensemble des machines sans permission" - return True, None - def can_view(self, user_request, *args, **kwargs): """Vérifie qu'on peut bien voir cette instance particulière (soit machine de soi, soit droit particulier @@ -161,7 +163,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" @@ -184,40 +186,6 @@ class MachineType(models.Model): machinetype""" return Interface.objects.filter(type=self) - def get_instance(machinetypeid, *args, **kwargs): - """Récupère une instance - :param machinetypeid: Instance id à trouver - :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 +199,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" @@ -372,68 +323,17 @@ class IpType(models.Model): self.clean() super(IpType, self).save(*args, **kwargs) - def get_instance(iptypeid, *args, **kwargs): - """Récupère une instance - :param iptypeid: Instance id à trouver - :return: Une instance iptype évidemment""" - return IpType.objects.get(pk=iptypeid) - 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_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" @@ -447,61 +347,11 @@ class Vlan(models.Model): ("view_vlan", "Peut voir un objet vlan"), ) - def get_instance(vlanid, *args, **kwargs): - """Récupère une instance - :param vlanid: Instance id à trouver - :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""" @@ -536,62 +386,11 @@ class Nas(models.Model): ("view_nas", "Peut voir un objet Nas"), ) - def get_instance(nasid, *args, **kwargs): - """Récupère une instance - :param nasid: Instance id à trouver - :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 : @@ -628,56 +427,6 @@ class SOA(models.Model): ("view_soa", "Peut voir un objet soa"), ) - def get_instance(soaid, *args, **kwargs): - """Récupère une instance - :param soaid: Instance id à trouver - :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 +467,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" @@ -766,62 +515,12 @@ class Extension(models.Model): entry += "@ IN AAAA " + str(self.origin_v6) return entry - def get_instance(extensionid, *args, **kwargs): - """Récupère une instance - :param extensionid: Instance id à trouver - :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 +530,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 """ @@ -852,61 +551,11 @@ class Mx(models.Model): fichiers de zones""" return "@ IN MX " + str(self.priority).ljust(3) + " " + str(self.name) - def get_instance(mxid, *args, **kwargs): - """Récupère une instance - :param mxid: Instance id à trouver - :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" @@ -923,61 +572,11 @@ class Ns(models.Model): """Renvoie un enregistrement NS complet pour les filezones""" return "@ IN NS " + str(self.ns) - def get_instance(nsid, *args, **kwargs): - """Récupère une instance - :param nsid: Instance id à trouver - :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" @@ -990,56 +589,6 @@ class Txt(models.Model): ("view_txt", "Peut voir un objet txt"), ) - def get_instance(txtid, *args, **kwargs): - """Récupère une instance - :param txtid: Instance id à trouver - :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 +599,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' @@ -1098,56 +647,6 @@ class Srv(models.Model): ("view_soa", "Peut voir un objet soa"), ) - def get_instance(srvid, *args, **kwargs): - """Récupère une instance - :param srvid: Instance id à trouver - :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) +\ @@ -1162,7 +661,7 @@ class Srv(models.Model): str(self.port) + ' ' + str(self.target) + '.' -class Interface(FieldPermissionModelMixin,models.Model): +class Interface(AclMixin, FieldPermissionModelMixin,models.Model): """ Une interface. Objet clef de l'application machine : - une address mac unique. Possibilité de la rendre unique avec le typemachine @@ -1320,12 +819,6 @@ class Interface(FieldPermissionModelMixin,models.Model): correspondent pas") super(Interface, self).save(*args, **kwargs) - def get_instance(interfaceid, *args, **kwargs): - """Récupère une instance - :param interfaceid: Instance id à trouver - :return: Une instance interface évidemment""" - return Interface.objects.get(pk=interfaceid) - def can_create(user_request, machineid, *args, **kwargs): """Verifie que l'user a les bons droits infra pour créer une interface, ou bien que la machine appartient bien à l'user @@ -1377,16 +870,6 @@ class Interface(FieldPermissionModelMixin,models.Model): d'un autre user que vous sans droit" return True, None - def can_view_all(user_request, *args, **kwargs): - """Vérifie qu'on peut bien afficher l'ensemble des interfaces, - 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_interface'): - return False, u"Vous n'avez pas le droit de voir des machines autre\ - que les vôtres" - 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 ou qu'elle appartient à l'user @@ -1425,7 +908,7 @@ class Interface(FieldPermissionModelMixin,models.Model): return self.ipv4 and not self.has_private_ip() -class Ipv6List(FieldPermissionModelMixin, models.Model): +class Ipv6List(AclMixin, FieldPermissionModelMixin, models.Model): PRETTY_NAME = 'Enregistrements Ipv6 des machines' ipv6 = models.GenericIPAddressField( @@ -1441,12 +924,6 @@ class Ipv6List(FieldPermissionModelMixin, models.Model): ("change_ipv6list_slaac_ip", "Peut changer la valeur slaac sur une ipv6"), ) - def get_instance(ipv6listid, *args, **kwargs): - """Récupère une instance - :param interfaceid: Instance id à trouver - :return: Une instance interface évidemment""" - return Ipv6List.objects.get(pk=ipv6listid) - def can_create(user_request, interfaceid, *args, **kwargs): """Verifie que l'user a les bons droits infra pour créer une ipv6, ou possède l'interface associée @@ -1491,16 +968,6 @@ class Ipv6List(FieldPermissionModelMixin, models.Model): d'un autre user que vous sans droit" return True, None - def can_view_all(user_request, *args, **kwargs): - """Vérifie qu'on peut bien afficher l'ensemble des interfaces, - 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_ipv6list'): - return False, u"Vous n'avez pas le droit de voir des machines autre\ - que les vôtres" - 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 ou qu'elle appartient à l'user @@ -1545,7 +1012,7 @@ class Ipv6List(FieldPermissionModelMixin, models.Model): return str(self.ipv6) -class Domain(models.Model): +class Domain(AclMixin, models.Model): """ Objet domain. Enregistrement A et CNAME en même temps : permet de stocker les alias et les nom de machines, suivant si interface_parent ou cname sont remplis""" @@ -1638,12 +1105,6 @@ class Domain(models.Model): else: return self.cname.get_parent_interface() - def get_instance(domainid, *args, **kwargs): - """Récupère une instance - :param domainid: Instance id à trouver - :return: Une instance domain évidemment""" - return Domain.objects.get(pk=domainid) - def can_create(user_request, interfaceid, *args, **kwargs): """Verifie que l'user a les bons droits infra pour créer un domain, ou possède l'interface associée @@ -1693,16 +1154,6 @@ class Domain(models.Model): d'un autre user que vous sans droit" return True, None - def can_view_all(user_request, *args, **kwargs): - """Vérifie qu'on peut bien afficher l'ensemble des domain, - 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_domain'): - return False, u"Vous ne pouvez pas supprimer un alias à une machine\ - d'un autre user que vous sans droit" - 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 ou qu'elle appartient à l'user @@ -1719,7 +1170,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) @@ -1747,64 +1198,11 @@ class IpList(models.Model): self.clean() super(IpList, self).save(*args, **kwargs) - def get_instance(iplistid, *args, **kwargs): - """Récupère une instance - :param iplistid: Instance id à trouver - :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)" @@ -1845,56 +1243,6 @@ class Service(models.Model): def save(self, *args, **kwargs): super(Service, self).save(*args, **kwargs) - def get_instance(serviceid, *args, **kwargs): - """Récupère une instance - :param serviceid: Instance id à trouver - :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 +1256,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" @@ -1935,62 +1283,11 @@ class Service_link(models.Model): ) < timezone.now() ) - def get_instance(servicelinkid, *args, **kwargs): - """Récupère une instance - :param servicelinkid: Instance id à trouver - :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" @@ -2004,30 +1301,6 @@ class OuverturePortList(models.Model): ("view_ouvertureportlist", "Peut voir un objet ouvertureport"), ) - def get_instance(ouvertureportlistid, *args, **kwargs): - """Récupère une instance - :param ouvertureportlistid: Instance id à trouver - :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 +1314,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 +1346,7 @@ class OuverturePortList(models.Model): ) -class OuverturePort(models.Model): +class OuverturePort(AclMixin, models.Model): """ Représente un simple port ou une plage de ports. @@ -2128,60 +1384,6 @@ class OuverturePort(models.Model): default=OUT, ) - def get_instance(ouvertureportid, *args, **kwargs): - """Récupère une instance - :param ouvertureportid: Instance id à trouver - :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/machines/templates/machines/aff_extension.html b/machines/templates/machines/aff_extension.html index 0da5a08e..44061b1b 100644 --- a/machines/templates/machines/aff_extension.html +++ b/machines/templates/machines/aff_extension.html @@ -24,6 +24,7 @@ with this program; if not, write to the Free Software Foundation, Inc., {% load acl %} +
@@ -38,7 +39,7 @@ with this program; if not, write to the Free Software Foundation, Inc., {% for extension in extension_list %} - + @@ -47,7 +48,7 @@ with this program; if not, write to the Free Software Foundation, Inc., {% endif %} {% endfor %}
{{ extension.name }} {{ extension.need_infra }} {{ extension.soa}}{{ extension.origin_v6 }} - {% can_create Extension %} + {% can_edit extension %} {% include 'buttons/edit.html' with href='machines:edit-extension' id=extension.id %} {% acl_end %} {% include 'buttons/history.html' with href='machines:history' name='extension' id=extension.id %} @@ -55,4 +56,4 @@ with this program; if not, write to the Free Software Foundation, Inc.,
- +
diff --git a/machines/templates/machines/aff_iptype.html b/machines/templates/machines/aff_iptype.html index c5ed4c10..1a76e303 100644 --- a/machines/templates/machines/aff_iptype.html +++ b/machines/templates/machines/aff_iptype.html @@ -23,15 +23,14 @@ with this program; if not, write to the Free Software Foundation, Inc., {% endcomment %} {% load acl %} - +
- - + @@ -44,8 +43,7 @@ with this program; if not, write to the Free Software Foundation, Inc., - - + @@ -58,4 +56,4 @@ with this program; if not, write to the Free Software Foundation, Inc., {% endfor %}
Type d'ip Extension Nécessite l'autorisation infraDébutFinPlage ipv4 Préfixe v6 Sur vlan Ouverture ports par défault{{ type.type }} {{ type.extension }} {{ type.need_infra }}{{ type.domaine_ip_start }}{{ type.domaine_ip_stop }}{{ type.domaine_ip_start }}-{{ type.domaine_ip_stop }} {{ type.prefix_v6 }} {{ type.vlan }} {{ type.ouverture_ports }}
- +
diff --git a/machines/templates/machines/aff_vlan.html b/machines/templates/machines/aff_vlan.html index deb8cb11..de49c7a6 100644 --- a/machines/templates/machines/aff_vlan.html +++ b/machines/templates/machines/aff_vlan.html @@ -24,6 +24,7 @@ with this program; if not, write to the Free Software Foundation, Inc., {% load acl %} +
@@ -41,7 +42,7 @@ with this program; if not, write to the Free Software Foundation, Inc., {% endfor %}
{{ vlan.comment }} {% for range in vlan.iptype_set.all %}{{ range }}, {% endfor%} - {% can_create Vlan %} + {% can_edit vlan %} {% include 'buttons/edit.html' with href='machines:edit-vlan' id=vlan.id %} {% acl_end %} {% include 'buttons/history.html' with href='machines:history' name='vlan' id=vlan.id %} @@ -49,4 +50,4 @@ with this program; if not, write to the Free Software Foundation, Inc.,
- +
diff --git a/preferences/models.py b/preferences/models.py index 5238e1a5..c0d761e6 100644 --- a/preferences/models.py +++ b/preferences/models.py @@ -34,7 +34,7 @@ from django.dispatch import receiver from django.core.cache import cache from .aes_field import AESEncryptedField - +from re2o.mixins import AclMixin class PreferencesModel(models.Model): @classmethod @@ -54,7 +54,7 @@ class PreferencesModel(models.Model): abstract = True -class OptionalUser(PreferencesModel): +class OptionalUser(AclMixin, PreferencesModel): """Options pour l'user : obligation ou nom du telephone, activation ou non du solde, autorisation du negatif, fingerprint etc""" PRETTY_NAME = "Options utilisateur" @@ -101,58 +101,6 @@ class OptionalUser(PreferencesModel): ("view_optionaluser", "Peut voir les options de l'user"), ) - def get_instance(*args, **kwargs): - return OptionalUser.objects.get_or_create() - - def can_create(user_request, *args, **kwargs): - """Check if an user can create a OptionalUser object. - - :param user_request: The user who wants to create a user object. - :return: a message and a boolean which is True if the user can create. - """ - return user_request.has_perm('preferences.add_optionaluser'), u"Vous n'avez pas le droit\ - de créer les préférences concernant les users" - - def can_edit(self, user_request, *args, **kwargs): - """Check if an user can edit a OptionalUser object. - - :param self: The OptionalUser which is to be edited. - :param user_request: The user who requests to edit self. - :return: a message and a boolean which is True if edition is granted. - """ - return user_request.has_perm('preferences.change_optionaluser'), u"Vous n'avez pas le droit\ - d'éditer les préférences concernant les users" - - def can_delete(self, user_request, *args, **kwargs): - """Check if an user can delete a OptionalUser object. - - :param self: The OptionalUser which is to be deleted. - :param user_request: The user who requests deletion. - :return: True if deletion is granted, and a message. - """ - return user_request.has_perm('preferences.delete_optionaluser'), u"Vous n'avez pas le droit\ - de supprimer les préférences concernant les users" - - def can_view_all(user_request, *args, **kwargs): - """Check if an user can access to the list of every OptionalUser objects - - :param user_request: The user who wants to view the list. - :return: True if the user can view the list and an explanation message. - """ - return user_request.has_perm('preferences.view_optionaluser'), u"Vous n'avez pas le droit\ - de voir les préférences concernant les utilisateurs" - - def can_view(self, user_request, *args, **kwargs): - """Check if an user can view a OptionalUser object. - - :param self: The targeted OptionalUser. - :param user_request: The user who ask for viewing the target. - :return: A boolean telling if the acces is granted and an explanation - text - """ - return user_request.has_perm('preferences.view_optionaluser'), u"Vous n'avez pas le droit\ - de voir les préférences concernant les utilisateurs" - def clean(self): """Creation du mode de paiement par solde""" if self.user_solde: @@ -169,7 +117,7 @@ def optionaluser_post_save(sender, **kwargs): user_pref.set_in_cache() -class OptionalMachine(PreferencesModel): +class OptionalMachine(AclMixin, PreferencesModel): """Options pour les machines : maximum de machines ou d'alias par user sans droit, activation de l'ipv6""" PRETTY_NAME = "Options machines" @@ -205,59 +153,6 @@ class OptionalMachine(PreferencesModel): ("view_optionalmachine", "Peut voir les options de machine"), ) - def get_instance(*args, **kwargs): - return OptionalMachine.objects.get_or_create() - - def can_create(user_request, *args, **kwargs): - """Check if an user can create a OptionalMachine object. - - :param user_request: The user who wants to create an object. - :return: a message and a boolean which is True if the user can create. - """ - return user_request.has_perm('preferences.add_optionalmachine'), u"Vous n'avez pas le droit\ - de créer les préférences concernant les machines" - - def can_edit(self, user_request, *args, **kwargs): - """Check if an user can edit a OptionalMachine object. - - :param self: The OptionalMachine which is to be edited. - :param user_request: The user who requests to edit self. - :return: a message and a boolean which is True if edition is granted. - """ - return user_request.has_perm('preferences.change_optionalmachine'), u"Vous n'avez pas le droit\ - d'éditer les préférences concernant les machines" - - def can_delete(self, user_request, *args, **kwargs): - """Check if an user can delete a OptionalMachine object. - - :param self: The OptionalMachine which is to be deleted. - :param user_request: The user who requests deletion. - :return: True if deletion is granted, and a message. - """ - - return user_request.has_perm('preferences.delete_optionalmachine'), u"Vous n'avez pas le droit\ - de supprimer les préférences concernant les machines" - - def can_view_all(user_request, *args, **kwargs): - """Check if an user can access to the list of every OptionalMachine objects - - :param user_request: The user who wants to view the list. - :return: True if the user can view the list and an explanation message. - """ - return user_request.has_perm('preferences.view_optionalmachine'), u"Vous n'avez pas le droit\ - de voir les préférences concernant les machines" - - def can_view(self, user_request, *args, **kwargs): - """Check if an user can view a OptionalMachine object. - - :param self: The targeted OptionalMachine. - :param user_request: The user who ask for viewing the target. - :return: A boolean telling if the acces is granted and an explanation - text - """ - return user_request.has_perm('preferences.view_optionalmachine'), u"Vous n'avez pas le droit\ - de voir les préférences concernant les machines" - @receiver(post_save, sender=OptionalMachine) def optionalmachine_post_save(sender, **kwargs): @@ -269,7 +164,7 @@ def optionalmachine_post_save(sender, **kwargs): interface.sync_ipv6() -class OptionalTopologie(PreferencesModel): +class OptionalTopologie(AclMixin, PreferencesModel): """Reglages pour la topologie : mode d'accès radius, vlan où placer les machines en accept ou reject""" PRETTY_NAME = "Options topologie" @@ -306,58 +201,6 @@ class OptionalTopologie(PreferencesModel): ("view_optionaltopologie", "Peut voir les options de topologie"), ) - def get_instance(*args, **kwargs): - return OptionalTopologie.objects.get_or_create() - - def can_create(user_request, *args, **kwargs): - """Check if an user can create a OptionalTopologie object. - - :param user_request: The user who wants to create an object. - :return: a message and a boolean which is True if the user can create. - """ - return user_request.has_perm('preferences.add_optionaltopologie'), u"Vous n'avez pas le droit\ - de créer les préférences concernant la topologie" - - def can_edit(self, user_request, *args, **kwargs): - """Check if an user can edit a OptionalTopologie object. - - :param self: The OptionalTopologie which is to be edited. - :param user_request: The user who requests to edit self. - :return: a message and a boolean which is True if edition is granted. - """ - return user_request.has_perm('preferences.change_optionaltopologie'), u"Vous n'avez pas le droit\ - d'éditer les préférences concernant la topologie" - - def can_delete(self, user_request, *args, **kwargs): - """Check if an user can delete a OptionalTopologie object. - - :param self: The OptionalTopologie which is to be deleted. - :param user_request: The user who requests deletion. - :return: True if deletion is granted, and a message. - """ - return user_request.has_perm('preferences.delete_optionaltoplogie'), u"Vous n'avez pas le droit\ - d'éditer les préférences concernant la topologie" - - def can_view_all(user_request, *args, **kwargs): - """Check if an user can access to the list of every OptionalTopologie objects - - :param user_request: The user who wants to view the list. - :return: True if the user can view the list and an explanation message. - """ - return user_request.has_perm('preferences.view_optionaltopologie'), u"Vous n'avez pas le droit\ - de voir les préférences concernant la topologie" - - def can_view(self, user_request, *args, **kwargs): - """Check if an user can view a OptionalTopologie object. - - :param self: The targeted OptionalTopologie. - :param user_request: The user who ask for viewing the target. - :return: A boolean telling if the acces is granted and an explanation - text - """ - return user_request.has_perm('preferences.view_optionaltopologie'), u"Vous n'avez pas le droit\ - de voir les préférences concernant la topologie" - @receiver(post_save, sender=OptionalTopologie) def optionaltopologie_post_save(sender, **kwargs): @@ -366,7 +209,7 @@ def optionaltopologie_post_save(sender, **kwargs): topologie_pref.set_in_cache() -class GeneralOption(PreferencesModel): +class GeneralOption(AclMixin, PreferencesModel): """Options générales : nombre de resultats par page, nom du site, temps où les liens sont valides""" PRETTY_NAME = "Options générales" @@ -398,59 +241,6 @@ class GeneralOption(PreferencesModel): ("view_generaloption", "Peut voir les options générales"), ) - def get_instance(*args, **kwargs): - return GeneralOption.objects.get_or_create() - - def can_create(user_request, *args, **kwargs): - """Check if an user can create a GeneralOption object. - - :param user_request: The user who wants to create an object. - :return: a message and a boolean which is True if the user can create. - """ - return user_request.has_perm('preferences.add_generaloption'), u"Vous n'avez pas le droit\ - de créer les préférences générales" - - def can_edit(self, user_request, *args, **kwargs): - """Check if an user can edit a GeneralOption object. - - :param self: The GeneralOption which is to be edited. - :param user_request: The user who requests to edit self. - :return: a message and a boolean which is True if edition is granted. - """ - return user_request.has_perm('preferences.change_generaloption'), u"Vous n'avez pas le droit\ - d'éditer les préférences générales" - - def can_delete(self, user_request, *args, **kwargs): - """Check if an user can delete a GeneralOption object. - - :param self: The GeneralOption which is to be deleted. - :param user_request: The user who requests deletion. - :return: True if deletion is granted, and a message. - """ - return user_request.has_perm('preferences.delete_generaloption'), u"Vous n'avez pas le droit\ - d'éditer les préférences générales" - - def can_view_all(user_request, *args, **kwargs): - """Check if an user can access to the list of every GeneralOption objects - - :param user_request: The user who wants to view the list. - :return: True if the user can view the list and an explanation message. - """ - - return user_request.has_perm('preferences.view_generaloption'), u"Vous n'avez pas le droit\ - de voir les préférences générales" - - def can_view(self, user_request, *args, **kwargs): - """Check if an user can view a GeneralOption object. - - :param self: The targeted GeneralOption. - :param user_request: The user who ask for viewing the target. - :return: A boolean telling if the acces is granted and an explanation - text - """ - return user_request.has_perm('preferences.view_generaloption'), u"Vous n'avez pas le droit\ - de voir les préférences générales" - @receiver(post_save, sender=GeneralOption) def generaloption_post_save(sender, **kwargs): @@ -459,7 +249,7 @@ def generaloption_post_save(sender, **kwargs): general_pref.set_in_cache() -class Service(models.Model): +class Service(AclMixin, models.Model): """Liste des services affichés sur la page d'accueil : url, description, image et nom""" name = models.CharField(max_length=32) @@ -472,65 +262,11 @@ class Service(models.Model): ("view_service", "Peut voir les options de service"), ) - def get_instance(serviceid, *args, **kwargs): - return Service.objects.get(pk=serviceid) - - def can_create(user_request, *args, **kwargs): - """Check if an user can create a Service object. - - :param user_request: The user who wants to create an object. - :return: a message and a boolean which is True if the user can create. - """ - - return user_request.has_perm('preferences.add_service'), u"Vous n'avez pas le droit\ - de créer un service pour la page d'accueil" - - def can_edit(self, user_request, *args, **kwargs): - """Check if an user can edit a Service object. - - :param self: The Service which is to be edited. - :param user_request: The user who requests to edit self. - :return: a message and a boolean which is True if edition is granted. - """ - return user_request.has_perm('preferences.change_service'), u"Vous n'avez pas le droit\ - d'éditer les services pour la page d'accueil" - - def can_delete(self, user_request, *args, **kwargs): - """Check if an user can delete a Service object. - - :param self: The Right which is to be deleted. - :param user_request: The user who requests deletion. - :return: True if deletion is granted, and a message. - """ - return user_request.has_perm('preferences.delete_service'), u"Vous n'avez pas le droit\ - de supprimer les services pour la page d'accueil" - - def can_view_all(user_request, *args, **kwargs): - """Check if an user can access to the list of every Service objects - - :param user_request: The user who wants to view the list. - :return: True if the user can view the list and an explanation message. - """ - - return user_request.has_perm('preferences.view_service'), u"Vous n'avez pas le droit\ - de voir les services pour la page d'accueil" - - def can_view(self, user_request, *args, **kwargs): - """Check if an user can view a Service object. - - :param self: The targeted Service. - :param user_request: The user who ask for viewing the target. - :return: A boolean telling if the acces is granted and an explanation - text - """ - return user_request.has_perm('preferences.view_service'), u"Vous n'avez pas le droit\ - de voir les services pour la page d'accueil" - def __str__(self): return str(self.name) -class AssoOption(PreferencesModel): +class AssoOption(AclMixin, PreferencesModel): """Options générales de l'asso : siret, addresse, nom, etc""" PRETTY_NAME = "Options de l'association" @@ -579,58 +315,6 @@ class AssoOption(PreferencesModel): ("view_assooption", "Peut voir les options de l'asso"), ) - def get_instance(*args, **kwargs): - return AssoOption.objects.get_or_create() - - def can_create(user_request, *args, **kwargs): - """Check if an user can create a AssoOption object. - - :param user_request: The user who wants to create an object. - :return: a message and a boolean which is True if the user can create. - """ - return user_request.has_perm('preferences.add_assooption'), u"Vous n'avez pas le droit\ - d'éditer les préférences concernant l'association" - - def can_edit(self, user_request, *args, **kwargs): - """Check if an user can edit a AssoOption object. - - :param self: The AssoOption which is to be edited. - :param user_request: The user who requests to edit self. - :return: a message and a boolean which is True if edition is granted. - """ - return user_request.has_perm('preferences.change_assooption'), u"Vous n'avez pas le droit\ - d'éditer les préférences concernant l'association" - - def can_delete(self, user_request, *args, **kwargs): - """Check if an user can delete a AssoOption object. - - :param self: The AssoOption which is to be deleted. - :param user_request: The user who requests deletion. - :return: True if deletion is granted, and a message. - """ - return user_request.has_perm('preferences.delete_assooption'), u"Vous n'avez pas le droit\ - d'éditer les préférences concernant l'association" - - def can_view_all(user_request, *args, **kwargs): - """Check if an user can access to the list of every AssoOption objects - - :param user_request: The user who wants to view the list. - :return: True if the user can view the list and an explanation message. - """ - return user_request.has_perm('preferences.view_assooption'), u"Vous n'avez pas le droit\ - de voir les préférences concernant l'association" - - def can_view(self, user_request, *args, **kwargs): - """Check if an user can view a AssoOption object. - - :param self: The targeted AssoOption. - :param user_request: The user who ask for viewing the target. - :return: A boolean telling if the acces is granted and an explanation - text - """ - return user_request.has_perm('preferences.view_assooption'), u"Vous n'avez pas le droit\ - de voir les préférences concernant l'association" - @receiver(post_save, sender=AssoOption) def assooption_post_save(sender, **kwargs): @@ -639,7 +323,7 @@ def assooption_post_save(sender, **kwargs): asso_pref.set_in_cache() -class MailMessageOption(models.Model): +class MailMessageOption(AclMixin, models.Model): """Reglages, mail de bienvenue et autre""" PRETTY_NAME = "Options de corps de mail" @@ -650,56 +334,3 @@ class MailMessageOption(models.Model): permissions = ( ("view_mailmessageoption", "Peut voir les options de mail"), ) - - def get_instance(*args, **kwargs): - return MailMessageOption.objects.get_or_create() - - def can_create(user_request, *args, **kwargs): - """Check if an user can create a MailMessageOption object. - - :param user_request: The user who wants to create an object. - :return: a message and a boolean which is True if the user can create. - """ - return user_request.has_perm('preferences.add_mailmessageoption'), u"Vous n'avez pas le droit\ - d'éditer les préférences concernant les mails" - - def can_edit(self, user_request, *args, **kwargs): - """Check if an user can edit a MailMessageOption object. - - :param self: The MailMessageOption which is to be edited. - :param user_request: The user who requests to edit self. - :return: a message and a boolean which is True if edition is granted. - """ - - return user_request.has_perm('preferences.change_mailmessageoption'), u"Vous n'avez pas le droit\ - d'éditer les préférences concernant les mails" - - def can_delete(self, user_request, *args, **kwargs): - """Check if an user can delete a AssoOption object. - - :param self: The AssoOption which is to be deleted. - :param user_request: The user who requests deletion. - :return: True if deletion is granted, and a message. - """ - return user_request.has_perm('preferences.delete_mailmessageoption'), u"Vous n'avez pas le droit\ - d'éditer les préférences concernant les mails" - - def can_view_all(user_request, *args, **kwargs): - """Check if an user can access to the list of every AssoOption objects - - :param user_request: The user who wants to view the list. - :return: True if the user can view the list and an explanation message. - """ - return user_request.has_perm('preferences.view_mailmessageoption'), u"Vous n'avez pas le droit\ - de voir les préférences concernant les mails" - - def can_view(self, user_request, *args, **kwargs): - """Check if an user can view a AssoOption object. - - :param self: The targeted AssoOption. - :param user_request: The user who ask for viewing the target. - :return: A boolean telling if the acces is granted and an explanation - text - """ - return user_request.has_perm('preferences.view_mailmessageoption'), u"Vous n'avez pas le droit\ - de voir les préférences concernant les mails" diff --git a/re2o/mixins.py b/re2o/mixins.py new file mode 100644 index 00000000..09c197d5 --- /dev/null +++ b/re2o/mixins.py @@ -0,0 +1,88 @@ +# -*- 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 © 2018 Gabriel Détraz +# +# 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): + """This mixin is used in nearly every class/models defined in re2o apps. + It is used by acl, in models (decorators can_...) and in templates tags + :get_instance: Applied on a class, take an id argument, return an instance + :can_create: Applied on a class, take the requested user, return if the user + can do the creation + :can_edit: Applied on an instance, return if the user can edit the instance + :can_delete: Applied on an instance, return if the user can delete the instance + :can_view: Applied on an instance, return if the user can view the instance + :can_view_all: Applied on a class, return if the user can view all instances""" + + @classmethod + def get_classname(cls): + return str(cls.__name__).lower() + + @classmethod + def get_modulename(cls): + return str(cls.__module__).split('.')[0].lower() + + @classmethod + def get_instance(cls, *args, **kwargs): + """Récupère une instance + :param objectid: Instance id à trouver + :return: Une instance de la classe évidemment""" + object_id = kwargs.get(cls.get_classname() + 'id') + return cls.objects.get(pk=object_id) + + @classmethod + def can_create(cls, user_request, *args, **kwargs): + """Verifie que l'user a les bons droits pour créer + un object + :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 pour editer + cette instance + :param self: Instance à 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 pour delete + cette instance + :param self: Instance à 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 objets, + 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 à 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() diff --git a/re2o/utils.py b/re2o/utils.py index 32be2432..aaefca8d 100644 --- a/re2o/utils.py +++ b/re2o/utils.py @@ -190,6 +190,10 @@ class SortTable: 'white_end': ['date_end'], 'default': ['-date_end'] } + USERS_INDEX_SCHOOL = { + 'school_name': ['name'], + 'default': ['name'] + } MACHINES_INDEX = { 'machine_name': ['name'], 'default': ['pk'] diff --git a/re2o/views.py b/re2o/views.py index 9a987e5a..9965dcda 100644 --- a/re2o/views.py +++ b/re2o/views.py @@ -65,7 +65,7 @@ HISTORY_BIND = { 'school' : users.models.School, 'listright' : users.models.ListRight, 'serviceuser' : users.models.ServiceUser, - 'shell' : users.models.ListShell, + 'listshell' : users.models.ListShell, }, 'preferences' : { 'service' : preferences.models.Service, @@ -81,9 +81,9 @@ HISTORY_BIND = { 'port' : topologie.models.Port, 'room' : topologie.models.Room, 'stack' : topologie.models.Stack, - 'model_switch' : topologie.models.ModelSwitch, - 'constructor_switch' : topologie.models.ConstructorSwitch, - 'ap' : topologie.models.AccessPoint, + 'modelswitch' : topologie.models.ModelSwitch, + 'constructorswitch' : topologie.models.ConstructorSwitch, + 'accesspoint' : topologie.models.AccessPoint, }, 'machines' : { 'machine' : machines.models.Machine, @@ -99,7 +99,7 @@ HISTORY_BIND = { 'ns' : machines.models.Ns, 'service' : machines.models.Service, 'vlan' : machines.models.Vlan, - 'nas' : machines.models.Vlan, + 'nas' : machines.models.Nas, 'ipv6list' : machines.models.Ipv6List, }, } @@ -128,8 +128,10 @@ def history(request, application, object_name, object_id): model = HISTORY_BIND[application][object_name] except KeyError as e: raise Http404(u"Il n'existe pas d'historique pour ce modèle.") + object_name_id = object_name + 'id' + kwargs = {object_name_id: object_id} try: - instance = model.get_instance(object_id) + instance = model.get_instance(**kwargs) except model.DoesNotExist: messages.error(request, u"Entrée inexistante") return redirect(reverse('users:profil', diff --git a/templates/base.html b/templates/base.html index 740881bf..6961e583 100644 --- a/templates/base.html +++ b/templates/base.html @@ -83,9 +83,10 @@ with this program; if not, write to the Free Software Foundation, Inc.,