From 7d8b61f0c93f5b094bb8c3dd206c8c9a573d4f23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ma=C3=ABl=20Kervella?= Date: Thu, 30 Nov 2017 19:02:15 +0000 Subject: [PATCH] Ajoute un message d'erreur si can_xxx renvoie False --- re2o/utils.py | 10 ++++++---- users/models.py | 43 ++++++++++++++++++++++++++++++------------- 2 files changed, 36 insertions(+), 17 deletions(-) diff --git a/re2o/utils.py b/re2o/utils.py index 91145d2a..866af9df 100644 --- a/re2o/utils.py +++ b/re2o/utils.py @@ -58,8 +58,9 @@ def can_create(model): """ def decorator(view): def wrapper(request,*args, **kwargs): - if not model.can_create(request.user): - messages.error(request, "Vous ne pouvez pas accéder à ce menu") + can, msg = model.can_create(request.user) + if not can: + messages.error(request, msg or "Vous ne pouvez pas accéder à ce menu") return redirect(reverse('users:profil', kwargs={'userid':str(request.user.id)} )) @@ -84,8 +85,9 @@ def can_edit(model): return redirect(reverse('users:profil', kwargs={'userid':str(request.user.id)} )) - if not model.can_edit(instance, request.user): - messages.error(request, "Vous ne pouvez pas accéder à ce menu") + can, msg = model.can_edit(instance, request.user) + if not can: + messages.error(request, msg or "Vous ne pouvez pas accéder à ce menu") return redirect(reverse('users:profil', kwargs={'userid':str(request.user.id)} )) diff --git a/users/models.py b/users/models.py index 9df23486..9606482d 100644 --- a/users/models.py +++ b/users/models.py @@ -765,24 +765,37 @@ class User(AbstractBaseUser): def can_create(user): options, _created = OptionalUser.objects.get_or_create() if options.all_can_create: - return True + return True, None else: - return user.has_perms(('cableur',)) + return user.has_perms(('cableur',)), u"Vous n'avez pas le\ + droit de créer un utilisateur" def can_edit(self, user): if self.is_class_club and user.is_class_adherent: - return self == user or user.has_perms(('cableur',)) or\ - user.adherent in self.club.administrators.all() + if self == user or user.has_perms(('cableur',)) or\ + user.adherent in self.club.administrators.all(): + return True, None + else: + return False, u"Vous n'avez pas le droit d'éditer ce club" else: - return self == user or user.has_perms(('cableur',)) + if self == user or user.has_perms(('cableur',)): + return True, None + else: + return False, u"Vous ne pouvez éditer un autre utilisateur que vous même" def can_view(self, user): if self.is_class_club and user.is_class_adherent: - return self == user or user.has_perms(('cableur',)) or\ + if self == user or user.has_perms(('cableur',)) or\ user.adherent in self.club.administrators.all() or\ - user.adherent in self.club.members.all() + user.adherent in self.club.members.all(): + return True, None + else: + return False, u"Vous n'avez pas le droit de voir ce club" else: - return self == user or user.has_perms(('cableur',)) + if self == user or user.has_perms(('cableur',)): + return True, None + else: + return False, u"Vous ne pouvez voir un autre utilisateur que vous même" def get_instance(userid): return User.objects.get(pk=userid) @@ -917,12 +930,14 @@ class ServiceUser(AbstractBaseUser): def can_create(user): options, _created = OptionalUser.objects.get_or_create() if options.all_can_create: - return True + return True, None else: - return user.has_perms(('infra',)) + return user.has_perms(('infra',)), u"Vous n'avez pas le droit de\ + créer un service user" def can_edit(instance, user): - return user.has_perms(('infra',)) + return user.has_perms(('infra',)), u"Vous n'avez pas le droit d'éditer\ + les services users" def get_instance(userid): return ServiceUser.objects.get(pk=userid) @@ -957,7 +972,8 @@ class Right(models.Model): return str(self.user) def can_create(user): - return user.has_perms('bureau') + return user.has_perms('bureau'), u"Vous n'avez pas le droit de\ + créer des droits" @receiver(post_save, sender=Right) @@ -1104,7 +1120,8 @@ class Ban(models.Model): return str(self.user) + ' ' + str(self.raison) def can_create(user): - return user.has_perms(('bofh',)) + return user.has_perms(('bofh',)), u"Vous n'avez pas le droit de\ + créer des bannissement" @receiver(post_save, sender=Ban)