[lc_ldap/clubs] La mise en place des clubs dans l'intranet a été faite trop tôt.

* Aucun système de droit permettant au responsable de modifier club/machines de club
 n'avait été mis en place. C'est corrigé.
This commit is contained in:
Pierre-Elliott Bécue 2014-04-03 17:30:09 +02:00
parent 5559fa1876
commit 35f9c36461
4 changed files with 30 additions and 13 deletions

View file

@ -1238,7 +1238,7 @@ class homeDirectory(Attr):
Une adresse mail n'est modifiable que si on a au moins autant de droits Une adresse mail n'est modifiable que si on a au moins autant de droits
que la personne à qui est l'adresse mail que la personne à qui est l'adresse mail
""" """
modifiables = set() modifiables = set()
for i in liste_droits: for i in liste_droits:
if i in DROITS_SUPERVISEUR: if i in DROITS_SUPERVISEUR:
modifiables = modifiables.union(DROITS_SUPERVISEUR[i]) modifiables = modifiables.union(DROITS_SUPERVISEUR[i])

View file

@ -538,7 +538,6 @@ class lc_ldap(ldap.ldapobject.LDAPObject, object):
if objdn.endswith(self.dn) and objdn != self.dn: if objdn.endswith(self.dn) and objdn != self.dn:
return [attributs.parent] return [attributs.parent]
else: else:
return [] return []
@ -554,7 +553,21 @@ class lc_ldap(ldap.ldapobject.LDAPObject, object):
else: else:
return [] return []
def _check_respo(self, obj):
"""
Teste si l'objet fourni a pour responsable self.
Retourne une liste qui s'ajoutera à la liste des droits
"""
if "cid=" in obj.dn:
club = obj
if isinstance(obj, objets.machine) or isinstance(obj, objets.facture):
club = obj.proprio()
if isinstance(club, objets.club) and "aid=" + str(club['responsable'][0]) + "," + variables.base_dn == self.dn:
return [attributs.respo]
return []
return []
def get_local_machines(self, mode='ro'): def get_local_machines(self, mode='ro'):
filter="" filter=""

View file

@ -134,7 +134,7 @@ class CransLdapObject(object):
la méthode est en anglais pour ne pas interférer avec les attributs droits et jinja2 la méthode est en anglais pour ne pas interférer avec les attributs droits et jinja2
les méthodes de l'objet et ses attributs sont appelé de la même manière les méthodes de l'objet et ses attributs sont appelé de la même manière
""" """
return self.conn.droits + self.conn._check_parent(self.dn) + self.conn._check_self(self.dn) return self.conn.droits + self.conn._check_parent(self.dn) + self.conn._check_self(self.dn) + self.conn._check_respo(self)
def __init__(self, conn, dn, mode='ro', uldif=None, lockId=None): def __init__(self, conn, dn, mode='ro', uldif=None, lockId=None):
''' '''
@ -180,15 +180,15 @@ class CransLdapObject(object):
if dn == variables.base_dn: if dn == variables.base_dn:
mode = 'ro' mode = 'ro'
if mode in ['w', 'rw']:
if not self.may_be(variables.modified):
raise EnvironmentError("Vous n'avez pas le droit de modifier cet objet.")
self.mode = mode self.mode = mode
if self.mode in ['w', 'rw']:
if not self.may_be(variables.modified):
raise EnvironmentError("Vous n'avez pas le droit de modifier cet objet. DEB(dn=%s,user=%s,rights=%s)" % (dn, self.conn.dn, self.rights()))
self.update_attribs() self.update_attribs()
if mode in ['w', 'rw']: if self.mode in ['w', 'rw']:
# Vérification que `λv. str(Attr(v))` est bien une projection # Vérification que `λv. str(Attr(v))` est bien une projection
# C'est-à-dire que si on str(Attr(str(Attr(v)))) on retombe sur str(Attr(v)) # C'est-à-dire que si on str(Attr(str(Attr(v)))) on retombe sur str(Attr(v))
oldif = lc_ldap.ldif_to_uldif(self.attrs.to_ldif()) oldif = lc_ldap.ldif_to_uldif(self.attrs.to_ldif())
@ -578,7 +578,7 @@ class CransLdapObject(object):
except ldap_locks.LockError: except ldap_locks.LockError:
# Si on ne parvient pas à prendre le lock pour l'une des valeurs # Si on ne parvient pas à prendre le lock pour l'une des valeurs
# on libère les locks pris jusque là et on propage l'erreur # on libère les locks pris jusque là et on propage l'erreur
# les anciens locks et self._modifs reste bien inchangés # les anciens locks et self._modifs reste bien inchangés
for (a, b, c) in locked: for (a, b, c) in locked:
self.conn.lockholder.removelock(a, b, c) self.conn.lockholder.removelock(a, b, c)
raise raise
@ -918,9 +918,9 @@ class proprio(CransLdapObject):
class machine(CransLdapObject): class machine(CransLdapObject):
u""" Une machine """ u""" Une machine """
can_be_by = { variables.created: [attributs.nounou, attributs.bureau, attributs.cableur, attributs.parent], can_be_by = { variables.created: [attributs.nounou, attributs.bureau, attributs.cableur, attributs.parent, attributs.respo],
variables.modified: [attributs.nounou, attributs.bureau, attributs.cableur, attributs.parent], variables.modified: [attributs.nounou, attributs.bureau, attributs.cableur, attributs.parent, attributs.respo],
variables.deleted: [attributs.nounou, attributs.bureau, attributs.cableur, attributs.parent], variables.deleted: [attributs.nounou, attributs.bureau, attributs.cableur, attributs.parent, attributs.respo],
} }
attribs = [attributs.mid, attributs.macAddress, attributs.host, attribs = [attributs.mid, attributs.macAddress, attributs.host,
@ -1150,6 +1150,10 @@ class adherent(proprio):
@crans_object @crans_object
class club(proprio): class club(proprio):
u"""Club crans""" u"""Club crans"""
can_be_by = { variables.created: [attributs.nounou, attributs.bureau, attributs.cableur],
variables.modified: [attributs.nounou, attributs.bureau, attributs.respo, attributs.cableur],
variables.deleted: [attributs.nounou, attributs.bureau],
}
attribs = proprio.attribs + [attributs.cid, attributs.responsable, attributs.imprimeurClub] attribs = proprio.attribs + [attributs.cid, attributs.responsable, attributs.imprimeurClub]
ldap_name = "club" ldap_name = "club"

View file

@ -6,7 +6,7 @@
##: Encodage qu'on utilise pour parler à l'utilisateur si on n'a pas réussi à le détecter ##: Encodage qu'on utilise pour parler à l'utilisateur si on n'a pas réussi à le détecter
#fallback_encoding = 'utf-8' #fallback_encoding = 'utf-8'
#: Encodage de la base LDAP #: Encodage de la base LDAP
ldap_encoding = "utf-8" ldap_encoding = "utf-8"
#: uri par défaut de la base LDAP #: uri par défaut de la base LDAP
uri = "ldap://ldap.adm.crans.org/" uri = "ldap://ldap.adm.crans.org/"
#: dn racine de l'endroit où sont stockées les données #: dn racine de l'endroit où sont stockées les données