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 4678579d..cbf44b79 100644 --- a/cotisations/models.py +++ b/cotisations/models.py @@ -59,7 +59,7 @@ 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: @@ -402,9 +377,6 @@ class Article(AclMixin, 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 __str__(self): return self.name @@ -420,9 +392,6 @@ class Banque(AclMixin, models.Model): ("view_banque", "Peut voir un objet banque"), ) - def get_instance(banqueid, *args, **kwargs): - return Banque.objects.get(pk=banqueid) - def __str__(self): return self.name @@ -443,9 +412,6 @@ class Paiement(AclMixin, models.Model): ("view_paiement", "Peut voir un objet paiement"), ) - def get_instance(paiementid, *args, **kwargs): - return Paiement.objects.get(pk=paiementid) - def __str__(self): return self.moyen @@ -460,7 +426,7 @@ class Paiement(AclMixin, 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" @@ -485,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" @@ -512,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/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 de4c7311..d4368b2e 100644 --- a/machines/models.py +++ b/machines/models.py @@ -66,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 @@ -85,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 @@ -132,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 @@ -185,13 +186,6 @@ class MachineType(AclMixin, 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_use_all(user_request, *args, **kwargs): """Check if an user can use every MachineType. @@ -329,12 +323,6 @@ class IpType(AclMixin, 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 @@ -359,12 +347,6 @@ class Vlan(AclMixin, 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 __str__(self): return self.name @@ -404,12 +386,6 @@ class Nas(AclMixin, 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 __str__(self): return self.name @@ -451,12 +427,6 @@ class SOA(AclMixin, 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 __str__(self): return str(self.name) @@ -545,12 +515,6 @@ class Extension(AclMixin, 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_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 @@ -587,12 +551,6 @@ class Mx(AclMixin, 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 __str__(self): return str(self.zone) + ' ' + str(self.priority) + ' ' + str(self.name) @@ -614,12 +572,6 @@ class Ns(AclMixin, 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 __str__(self): return str(self.zone) + ' ' + str(self.ns) @@ -637,12 +589,6 @@ class Txt(AclMixin, 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 __str__(self): return str(self.zone) + " : " + str(self.field1) + " " +\ str(self.field2) @@ -701,12 +647,6 @@ class Srv(AclMixin, 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 __str__(self): return str(self.service) + ' ' + str(self.protocole) + ' ' +\ str(self.extension) + ' ' + str(self.priority) +\ @@ -721,7 +661,7 @@ class Srv(AclMixin, 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 @@ -879,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 @@ -936,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 @@ -984,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( @@ -1000,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 @@ -1050,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 @@ -1104,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""" @@ -1197,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 @@ -1252,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 @@ -1306,12 +1198,6 @@ class IpList(AclMixin, 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 __str__(self): return self.ipv4 @@ -1357,12 +1243,6 @@ class Service(AclMixin, 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 __str__(self): return str(self.service_type) @@ -1403,12 +1283,6 @@ class Service_link(AclMixin, 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 __str__(self): return str(self.server) + " " + str(self.service) @@ -1427,12 +1301,6 @@ class OuverturePortList(AclMixin, 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_delete(self, user_request, *args, **kwargs): """Verifie que l'user a les bons droits bureau pour delete cette instance ouvertureportlist @@ -1516,12 +1384,6 @@ class OuverturePort(AclMixin, 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 __str__(self): if self.begin == self.end: return str(self.begin) 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 index 09fee806..c176939a 100644 --- a/re2o/mixins.py +++ b/re2o/mixins.py @@ -3,9 +3,7 @@ # 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 +# 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 @@ -30,34 +28,42 @@ class AclMixin(object): 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 infra pour créer - un servicelink + """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 infra pour editer - cette instance servicelink - :param self: Instance servicelink à editer + """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 infra pour delete - cette instance servicelink - :param self: Instance servicelink à delete + """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 services, + """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""" @@ -66,7 +72,7 @@ class AclMixin(object): 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 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/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/topologie/migrations/0055_auto_20180329_0431.py b/topologie/migrations/0055_auto_20180329_0431.py new file mode 100644 index 00000000..f8633d84 --- /dev/null +++ b/topologie/migrations/0055_auto_20180329_0431.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.7 on 2018-03-29 02:31 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('topologie', '0054_auto_20180326_1742'), + ] + + operations = [ + migrations.AlterModelOptions( + name='accesspoint', + options={'permissions': (('view_accesspoint', 'Peut voir une borne'),)}, + ), + ] diff --git a/topologie/models.py b/topologie/models.py index bae4b054..9cef5c44 100644 --- a/topologie/models.py +++ b/topologie/models.py @@ -67,9 +67,6 @@ class Stack(AclMixin, models.Model): ("view_stack", "Peut voir un objet stack"), ) - def get_instance(stack_id, *args, **kwargs): - return Stack.objects.get(pk=stack_id) - def __str__(self): return " ".join([self.name, self.stack_id]) @@ -105,9 +102,6 @@ class AccessPoint(AclMixin, Machine): ("view_accesspoint", "Peut voir une borne"), ) - def get_instance(ap_id, *args, **kwargs): - return AccessPoint.objects.get(pk=ap_id) - class Switch(AclMixin, Machine): """ Definition d'un switch. Contient un nombre de ports (number), @@ -146,9 +140,6 @@ class Switch(AclMixin, Machine): ("view_switch", "Peut voir un objet switch"), ) - def get_instance(switch_id, *args, **kwargs): - return Switch.objects.get(pk=switch_id) - def clean(self): """ Verifie que l'id stack est dans le bon range Appelle également le clean de la classe parente""" @@ -210,9 +201,6 @@ class ModelSwitch(AclMixin, models.Model): ("view_modelswitch", "Peut voir un objet modelswitch"), ) - def get_instance(model_switch_id, *args, **kwargs): - return ModelSwitch.objects.get(pk=model_switch_id) - def __str__(self): return str(self.constructor) + ' ' + self.reference @@ -227,9 +215,6 @@ class ConstructorSwitch(AclMixin, models.Model): ("view_constructorswitch", "Peut voir un objet constructorswitch"), ) - def get_instance(constructor_switch_id, *args, **kwargs): - return ConstructorSwitch.objects.get(pk=constructor_switch_id) - def __str__(self): return self.name @@ -297,14 +282,14 @@ class Port(AclMixin, models.Model): ("view_port", "Peut voir un objet port"), ) - def get_instance(port_id, *args, **kwargs): + def get_instance(portid, *args, **kwargs): return Port.objects\ .select_related('machine_interface__domain__extension')\ .select_related('machine_interface__machine__switch')\ .select_related('room')\ .select_related('related')\ .prefetch_related('switch__interface_set__domain__extension')\ - .get(pk=port_id) + .get(pk=portid) def make_port_related(self): """ Synchronise le port distant sur self""" @@ -363,9 +348,6 @@ class Room(AclMixin, models.Model): ("view_room", "Peut voir un objet chambre"), ) - def get_instance(room_id, *args, **kwargs): - return Room.objects.get(pk=room_id) - def __str__(self): return self.name diff --git a/topologie/templates/topologie/aff_ap.html b/topologie/templates/topologie/aff_ap.html index 192e5026..fc38b4b1 100644 --- a/topologie/templates/topologie/aff_ap.html +++ b/topologie/templates/topologie/aff_ap.html @@ -49,7 +49,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,