[attributs] Plus nazi sur qui peut modifier les attributs userPassword, mail, homeDirectory
This commit is contained in:
parent
1d361ac0e5
commit
ad83a5aaa3
2 changed files with 54 additions and 5 deletions
56
attributs.py
56
attributs.py
|
@ -554,6 +554,23 @@ class mail(Attr):
|
|||
category = 'mail'
|
||||
ldap_name = "mail"
|
||||
|
||||
def is_modifiable(self, liste_droits):
|
||||
"""
|
||||
Une adresse mail n'est modifiable que si on a au moins autant de droits
|
||||
que la personne à qui est l'adresse mail
|
||||
"""
|
||||
modifiables = set()
|
||||
for i in liste_droits:
|
||||
if i in DROITS_SUPERVISEUR:
|
||||
modifiables = modifiables.union(DROITS_SUPERVISEUR[i])
|
||||
modifiables = list(modifiables)
|
||||
|
||||
for droit in self.parent.get('droits', []):
|
||||
if droit not in modifiables:
|
||||
return False
|
||||
return super(mail, self).is_modifiable(liste_droits)
|
||||
|
||||
|
||||
def check_uniqueness(self, liste_exclue):
|
||||
attr = self.__class__.__name__
|
||||
if str(self) in liste_exclue:
|
||||
|
@ -681,7 +698,7 @@ class droits(Attr):
|
|||
singlevalue = False
|
||||
optional = True
|
||||
legend = u"Droits sur les serveurs"
|
||||
can_modify = [nounou, bureau] #ne sert à rien ici, mais c'est tout à fait exceptionnel
|
||||
can_modify = [nounou, bureau]
|
||||
category = 'perso'
|
||||
ldap_name = "droits"
|
||||
|
||||
|
@ -693,6 +710,7 @@ class droits(Attr):
|
|||
def is_modifiable(self, liste_droits):
|
||||
"""
|
||||
Le droit est-il modifiable par un des droits dans liste_droits ?
|
||||
L'idée étant que pour modifier un droit, il faut avoir un droit plus fort
|
||||
"""
|
||||
modifiables = set()
|
||||
for i in liste_droits:
|
||||
|
@ -700,7 +718,7 @@ class droits(Attr):
|
|||
modifiables = modifiables.union(DROITS_SUPERVISEUR[i])
|
||||
modifiables = list(modifiables)
|
||||
|
||||
return self.value in modifiables
|
||||
return self.value in modifiables and super(droits, self).is_modifiable(liste_droits)
|
||||
|
||||
@crans_attribute
|
||||
class solde(Attr):
|
||||
|
@ -1195,9 +1213,26 @@ class homeDirectory(Attr):
|
|||
singlevalue=True
|
||||
optional = True
|
||||
unique = True
|
||||
can_modify = [nounou, bureau, cableur]
|
||||
legend="Le chemin du home de l'adhérent"
|
||||
ldap_name = "homeDirectory"
|
||||
|
||||
def is_modifiable(self, liste_droits):
|
||||
"""
|
||||
Une adresse mail n'est modifiable que si on a au moins autant de droits
|
||||
que la personne à qui est l'adresse mail
|
||||
"""
|
||||
modifiables = set()
|
||||
for i in liste_droits:
|
||||
if i in DROITS_SUPERVISEUR:
|
||||
modifiables = modifiables.union(DROITS_SUPERVISEUR[i])
|
||||
modifiables = list(modifiables)
|
||||
|
||||
for droit in self.parent.get('droits', []):
|
||||
if droit not in modifiables:
|
||||
return False
|
||||
return super(homeDirectory, self).is_modifiable(liste_droits)
|
||||
|
||||
def parse_value(self, home):
|
||||
uid = unicode(self.parent['uid'][0])
|
||||
if uid.startswith(u'club-'):
|
||||
|
@ -1276,6 +1311,23 @@ class userPassword(Attr):
|
|||
legend = "Le mot de passe"
|
||||
category = ''
|
||||
ldap_name = "userPassword"
|
||||
can_modify = [nounou, bureau, cableur]
|
||||
|
||||
def is_modifiable(self, liste_droits):
|
||||
"""
|
||||
Le mot de passe n'est modifiable que si on a au moins autant de droits
|
||||
que la personne à qui est le mot de passe
|
||||
"""
|
||||
modifiables = set()
|
||||
for i in liste_droits:
|
||||
if i in DROITS_SUPERVISEUR:
|
||||
modifiables = modifiables.union(DROITS_SUPERVISEUR[i])
|
||||
modifiables = list(modifiables)
|
||||
|
||||
for droit in self.parent.get('droits', []):
|
||||
if droit not in modifiables:
|
||||
return False
|
||||
return super(userPassword, self).is_modifiable(liste_droits)
|
||||
|
||||
@crans_attribute
|
||||
class sshFingerprint(Attr):
|
||||
|
|
|
@ -384,9 +384,6 @@ def services_to_restart(conn, old_attrs={}, new_attrs={}, created_object=[], del
|
|||
service_to_restart(conn, service, [], 0)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# Identique à la classe dans ldap_crans.py
|
||||
class Service:
|
||||
""" Définit un service à redémarrer """
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue