From c9fd4cd7b584dfef73f28cbb7ea5c23c61a7d7e7 Mon Sep 17 00:00:00 2001 From: Gabriel Detraz Date: Thu, 29 Mar 2018 04:35:23 +0200 Subject: [PATCH] Fix acl mixin sur users, docstring, fix topologie acl --- machines/models.py | 7 +++ re2o/mixins.py | 20 +++---- .../migrations/0055_auto_20180329_0431.py | 19 +++++++ topologie/templates/topologie/index_p.html | 4 +- users/models.py | 52 +++++++------------ 5 files changed, 56 insertions(+), 46 deletions(-) create mode 100644 topologie/migrations/0055_auto_20180329_0431.py diff --git a/machines/models.py b/machines/models.py index a07840a6..d4368b2e 100644 --- a/machines/models.py +++ b/machines/models.py @@ -65,6 +65,13 @@ class Machine(FieldPermissionModelMixin, models.Model): ("change_machine_user", "Peut changer le propriétaire d'une machine"), ) + def get_instance(machineid, *args, **kwargs): + """Get the Machine instance with machineid. + :param userid: The id + :return: The user + """ + return Machine.objects.get(pk=machineid) + @staticmethod def can_change_user(user_request, *args, **kwargs): """Checks if an user is allowed to change the user who owns a diff --git a/re2o/mixins.py b/re2o/mixins.py index 71128a58..c176939a 100644 --- a/re2o/mixins.py +++ b/re2o/mixins.py @@ -38,32 +38,32 @@ class AclMixin(object): @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""" @@ -72,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/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/templates/topologie/index_p.html b/topologie/templates/topologie/index_p.html index 1ba7c01a..4fc1a61d 100644 --- a/topologie/templates/topologie/index_p.html +++ b/topologie/templates/topologie/index_p.html @@ -33,9 +33,9 @@ with this program; if not, write to the Free Software Foundation, Inc., Editer {% can_create Port %} Ajouter un port -{% acl_end %} Ajouter des ports - {% include "topologie/aff_port.html" with port_list=port_list %} +{% acl_end %} + {% include "topologie/aff_port.html" with port_list=port_list %}


diff --git a/users/models.py b/users/models.py index adec20ed..512259ae 100644 --- a/users/models.py +++ b/users/models.py @@ -171,7 +171,7 @@ class UserManager(BaseUserManager): """ return self._create_user(pseudo, surname, email, password, True) -class User(FieldPermissionModelMixin, AbstractBaseUser, PermissionsMixin): +class User(FieldPermissionModelMixin, AbstractBaseUser, PermissionsMixin, AclMixin): """ Definition de l'utilisateur de base. Champs principaux : name, surnname, pseudo, email, room, password Herite du django BaseUser et du système d'auth django""" @@ -668,14 +668,6 @@ class User(FieldPermissionModelMixin, AbstractBaseUser, PermissionsMixin): num += 1 return composed_pseudo(num) - def get_instance(userid, *args, **kwargs): - """Get the User instance with userid. - - :param userid: The id - :return: The user - """ - return User.objects.get(pk=userid) - def can_edit(self, user_request, *args, **kwargs): """Check if an user can edit an user object. @@ -746,29 +738,6 @@ class User(FieldPermissionModelMixin, AbstractBaseUser, PermissionsMixin): def can_change_groups(user_request, *args, **kwargs): return user_request.has_perm('users.change_user_groups'), "Droit requis pour éditer les groupes de l'user" - def can_delete(self, user_request, *args, **kwargs): - """Check if an user can delete an user object. - - :param self: The user who is to be deleted. - :param user_request: The user who requests deletion. - :return: True if user_request has the right 'bureau', and a message. - """ - if user_request.has_perm('users.delete_user'): - return True, None - else: - return False, u"Vous ne pouvez pas supprimer cet utilisateur." - - def can_view_all(user_request, *args, **kwargs): - """Check if an user can access to the list of every user 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. - """ - if user_request.has_perm('users.view_user'): - return True, None - else: - return False, u"Vous n'avez pas accès à la liste des utilisateurs." - def can_view(self, user_request, *args, **kwargs): """Check if an user can view an user object. @@ -791,6 +760,23 @@ class User(FieldPermissionModelMixin, AbstractBaseUser, PermissionsMixin): else: return False, u"Vous ne pouvez voir un autre utilisateur que vous même" + def can_view_all(user_request, *args, **kwargs): + """Check if an user can access to the list of every user 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('users.view_user'), u"Vous n'avez pas accès à la liste des utilisateurs." + + def can_delete(self, user_request, *args, **kwargs): + """Check if an user can delete an user object. + + :param self: The user who is to be deleted. + :param user_request: The user who requests deletion. + :return: True if user_request has the right 'bureau', and a message. + """ + return user_request.has_perm('users.delete_user'), u"Vous ne pouvez pas supprimer cet utilisateur." + def __init__(self, *args, **kwargs): super(User, self).__init__(*args, **kwargs) self.field_permissions = { @@ -813,8 +799,6 @@ class Adherent(User): null=True ) - - def get_instance(adherentid, *args, **kwargs): """Try to find an instance of `Adherent` with the given id.