Ajout de documentation sur is_modifiable dans userPassword

This commit is contained in:
Pierre-Elliott Bécue 2015-10-08 15:09:04 +02:00
parent a1f27f9f1a
commit 48de31425d

View file

@ -351,9 +351,7 @@ class Attr(object):
raise UniquenessError("%s déjà existant" % attr, [r.dn for r in res])
def is_modifiable(self, liste_droits):
"""
L'attribut est-il modifiable par un des droits dans liste_droits ?
"""
"""L'attribut est-il modifiable par un des droits dans liste_droits ?"""
return not set(liste_droits).isdisjoint(self.can_modify)
class AttributeFactory(object):
@ -394,13 +392,26 @@ class rightProtectedAttr(Attr):
"""
On permet la modification à un utilisateur
"""
# Si on est soi-même, on peut changer son mot de passe sans condition
if not soi in liste_droits:
modifiables = set()
# On regarde la liste des droits qu'a la connexion courante, ce sont a priori
# les droits de l'utilisateur qui modifie le mot de passe, ajoutés de soi/parent
# les cas échéants.
for i in liste_droits:
# Si le droit est un droit "superviseur" (ie ayant le droit de modifier certains
# utilisateurs ayant un des droits "supervisés", on ajoute la liste des droits
# supervisés aux droits modifiables
if i in DROITS_SUPERVISEUR:
modifiables = modifiables.union(DROITS_SUPERVISEUR[i])
modifiables = list(modifiables)
# On prend les droits de l'utilisateur dont on cherche à modifier le mot de passe
# et on les compare à la liste des droits que l'utilisateur qui modifie a le droit
# de modifier. S'il y en a un qui n'est pas dans la liste des droits modifiables, on jette.
for droit in self.parent.get('droits', []):
if droit not in modifiables and droit in TOUS_DROITS:
return False