bruno modulix wrote:

Bon, j'ai mon MetaDirectory, mon StackingDirectory et mon
BackingDirectory... J'arrive à lire mes utilisateurs... et c'est tout.

Question suivante: comment je fais pour les roles et les groupes ?

D'après ce que j'ai vu dans d'autres posts ici, avec cet agencement, les
affectations user/roles et user/groups sont supposées être stockées dans
l'enregistrement user. Mais ça ne me dis pas où je stocke les groupes et
roles eux même, ni comment se fait la liaison dans le layout ???


Le schema members doit donc contenir un champs roles et un champs groups qui sont des String Fields. Ces infos peuvent etre stockées dans un backing différent, par exemple un ZODBBackingDirectory (pas la peine de mettre en place une branche autre LDAP si cette liste n'est utilisée que par CPS).

on aura donc :

                        members (Meta)
                        id
                        sn
                        givenName
                        dn
                        [...]
                        groups
                        roles
                           |
                           |
        |---------------------------------------|
 members_stacking (Stacking)            members_zodb (ZODBBacking)
 id                                     groups  
 sn                                     roles
 givenName
 dn
 [...]          
        |
 members_ldap (LDAPBacking)
 dn
 sn
 givenName
 id
 [...]


Concernant les annuaires de groupes et de roles : il faut effectivement les remplacer par autre choses car ils ne sont pas prévus pour fonctionner avec CPSUserFolder. Nous allons donc utiliser des annuaires croisées et effectivement, ils ne stockent que la liste des roles et groupes et offre une interface pour pouvoir faire des editions inversées : pour un groupe donné, changer la liste des membres y appartenant. Le champs 'members' du l'annuaire 'groups' est donc un champs calculé. Il faut faire un peu de code pour obtenir ces editions croisées.

Dans la pratique, l'annuaire des roles est inutilisé. Donc autant s'en passer (le supprimer completement) et juste utiliser un simple vocabulaire pour stocker les deux roles globaux disponibles (Manager et Member) pour le widget de selection. CPSUserFolder n'a pas besoin d'un annuaire de roles a pour fonctionner. Pour l'annuaire des groupe, on pourra utiliser un simple ZODBDirectory.

Donc voila : ca fait du pain sur la planche ! Mais heureusement, il y a une bonne nouvelle : il existe dans le svn une branche qui permet de configurer CPS pour utiliser CPSUserFolder avec un ZODBDirectory pour les groupes avec des champs calculé pour faire l'edition croisée tout pret. La methode pour faire ces editions croisé se trouve dans le tool portal_directories et j'ai mis à jour les definition du schema de l'annuaire des groupes pour utiliser ces methodes.

http://svn.nuxeo.org/trac/pub/browser/CPSDirectory/branches/ogrisel-switch_to_cpsuserfolder_ticket811/

Pour télécharger cette version :

svn co http://svn.nuxeo.org/pub/CPSDirectory/branches/ogrisel-switch_to_cpsuserfolder_ticket811/ CPSDirectory

Il existe une branche equivalente qui change un peu l'installer de CPSDefault pour installer CPSUserFolder par defaut.

Le but de ces deux branches est de mettre CPSUserFolder par defaut dans un prochaine version de CPS. Tout est pres et fonctionne. Il manque juste la mise à jour de certains vieux tests et d'ecrire un script pour migrer les sites CPS existants vers CPSUserFolder. J'ai pas le temps de finir ca pour l'instant mais j'espere le trouver le mois prochain.

Voila. Bon courage pour la suite :)

--
Olivier


PS: le howto sera le bienvenu, même si a priori CPSUserFolder sera bientot (?) installé par defaut dans CPS :)

_______________________________________________
cps-users-fr Adresse de la liste : [email protected]
Gestion de l'abonnement : <http://lists.nuxeo.com/mailman/listinfo/cps-users-fr>

Répondre à