[ldap_crans.py,gest_crans.py] Fusion droits() et droits_light()

Les deux fonctions etant assez similaires ...

darcs-hash:20100318151032-ddb99-01a885b320ba5fe3fbe1403380725167c1230e6c.gz
This commit is contained in:
Michel Blockelet 2010-03-18 16:10:32 +01:00
parent 0d633d4e7b
commit 61302647c9
2 changed files with 19 additions and 48 deletions

View file

@ -571,7 +571,7 @@ def set_droits(adher):
for key in droits_critiques:
if key in adher.droits():
result.append(key.encode("ISO-8859-15"))
adher.droits_light(result)
adher.droits(result, light=True)
else:
adher.droits(result)

View file

@ -2296,10 +2296,10 @@ class Adherent(BaseProprietaire):
self._set('canonicalAlias', [a])
return a
def droits(self, droits=None):
u""" droits est la liste des droits à donner à l'utilisateur """
u""" ATTENTION : il y a une autre fonction droits_lights derrière celle-çi,
pensez à faire vos modifs sur les deux """
def droits(self, droits=None, light=False):
u"""Modifie les droits d'un compte.
droits est la liste des droits à donner à l'utilisateur,
light permet de modifier les droits non critiques sans être Nounou."""
if droits != None and 'cransAccount' not in self._data.get('objectClass', []):
raise EnvironmentError(u'Il faut avoir un compte pour avoir des droits.')
@ -2307,10 +2307,13 @@ class Adherent(BaseProprietaire):
if droits == None:
return map(decode, self._data.get('droits', []))
from user_tests import isadm
if not isadm():
raise EnvironmentError(u'Il faut être administrateur pour effectuer cette opération.')
# Si pas light, il faut être Nounou
if not light:
from user_tests import isadm
if not isadm():
raise EnvironmentError(u'Il faut être administrateur pour effectuer cette opération.')
# On vérifie la liste donnée
if type(droits) != list:
raise TypeError(u'Une liste est attendue')
@ -2323,51 +2326,19 @@ class Adherent(BaseProprietaire):
new.append(droit.encode('utf-8'))
ancien = self._data.get('droits', [])
# On envoie les mails de "bienvenue" pour chaque nouveau droit
for droit in new:
if droit not in ancien:
db.services_to_restart("mail_ajout_droits", self.compte().encode('latin-1') + ":" + droit)
if new != self._data.get('droits', []):
self._set('droits', new)
return new
# Si light, alors on n'a pas le droit de modifier les droits critiques
if light:
diff = [droit for droit in (ancien + new)
if (droit not in ancien or droit not in new) and (droit in droits_critiques)]
if len(diff) > 0:
raise("Droits critiques modifies (?) :: %s" % ','.join(diff))
def droits_light(self, droits=None):
u""" droits_light ne verifie pas isadm et ne touche pas aux droits critiques """
if droits != None and 'cransAccount' not in self._data.get('objectClass', []):
raise EnvironmentError(u'Il faut avoir un compte pour avoir des droits.')
if droits == None:
return map(decode, self._data.get('droits', []))
if type(droits) != list:
raise TypeError(u'Une liste est attendue')
new = []
for droit in droits:
if droit == '': continue
droit = unicode(droit.strip(), 'iso-8859-15')
if droit not in droits_possibles:
raise ValueError(u'Droit %s incorrect' % droit)
new.append(droit.encode('utf-8'))
ancien = self._data.get('droits', [])
for droit in new:
if droit not in ancien:
db.services_to_restart("mail_ajout_droits", self.compte().encode('latin-1') + ":" + droit)
diff = []
for droit in new:
if droit not in ancien:
diff.append(droit)
for droit in ancien:
if droit not in new:
diff.append(droit)
dc = [] # snif... il faut reencoder la liste des droits critiques
for droit in droits_critiques:
dc.append(droit.encode('utf-8'))
for droit in diff:
if droit in dc:
raise("Droits critiques modifies (?)")
# Sauvegarde
if new != self._data.get('droits', []):
self._set('droits', new)