[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:
parent
0d633d4e7b
commit
61302647c9
2 changed files with 19 additions and 48 deletions
|
@ -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)
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue