[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:
|
for key in droits_critiques:
|
||||||
if key in adher.droits():
|
if key in adher.droits():
|
||||||
result.append(key.encode("ISO-8859-15"))
|
result.append(key.encode("ISO-8859-15"))
|
||||||
adher.droits_light(result)
|
adher.droits(result, light=True)
|
||||||
else:
|
else:
|
||||||
adher.droits(result)
|
adher.droits(result)
|
||||||
|
|
||||||
|
|
|
@ -2296,10 +2296,10 @@ class Adherent(BaseProprietaire):
|
||||||
self._set('canonicalAlias', [a])
|
self._set('canonicalAlias', [a])
|
||||||
return a
|
return a
|
||||||
|
|
||||||
def droits(self, droits=None):
|
def droits(self, droits=None, light=False):
|
||||||
u""" droits est la liste des droits à donner à l'utilisateur """
|
u"""Modifie les droits d'un compte.
|
||||||
u""" ATTENTION : il y a une autre fonction droits_lights derrière celle-çi,
|
droits est la liste des droits à donner à l'utilisateur,
|
||||||
pensez à faire vos modifs sur les deux """
|
light permet de modifier les droits non critiques sans être Nounou."""
|
||||||
|
|
||||||
if droits != None and 'cransAccount' not in self._data.get('objectClass', []):
|
if droits != None and 'cransAccount' not in self._data.get('objectClass', []):
|
||||||
raise EnvironmentError(u'Il faut avoir un compte pour avoir des droits.')
|
raise EnvironmentError(u'Il faut avoir un compte pour avoir des droits.')
|
||||||
|
@ -2307,10 +2307,13 @@ class Adherent(BaseProprietaire):
|
||||||
if droits == None:
|
if droits == None:
|
||||||
return map(decode, self._data.get('droits', []))
|
return map(decode, self._data.get('droits', []))
|
||||||
|
|
||||||
from user_tests import isadm
|
# Si pas light, il faut être Nounou
|
||||||
if not isadm():
|
if not light:
|
||||||
raise EnvironmentError(u'Il faut être administrateur pour effectuer cette opération.')
|
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:
|
if type(droits) != list:
|
||||||
raise TypeError(u'Une liste est attendue')
|
raise TypeError(u'Une liste est attendue')
|
||||||
|
|
||||||
|
@ -2323,51 +2326,19 @@ class Adherent(BaseProprietaire):
|
||||||
new.append(droit.encode('utf-8'))
|
new.append(droit.encode('utf-8'))
|
||||||
|
|
||||||
ancien = self._data.get('droits', [])
|
ancien = self._data.get('droits', [])
|
||||||
|
# On envoie les mails de "bienvenue" pour chaque nouveau droit
|
||||||
for droit in new:
|
for droit in new:
|
||||||
if droit not in ancien:
|
if droit not in ancien:
|
||||||
db.services_to_restart("mail_ajout_droits", self.compte().encode('latin-1') + ":" + droit)
|
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):
|
# Sauvegarde
|
||||||
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 (?)")
|
|
||||||
if new != self._data.get('droits', []):
|
if new != self._data.get('droits', []):
|
||||||
self._set('droits', new)
|
self._set('droits', new)
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue