<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="http://www.jsmansart.com/feed/rss2/xslt" ?><rss version="2.0"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:wfw="http://wellformedweb.org/CommentAPI/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/"
  xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
  <title>Jean-Sébastien Mansart .com - Tag - python</title>
  <link>http://www.jsmansart.com/</link>
  <atom:link href="http://www.jsmansart.com/feed/tag/python/rss2" rel="self" type="application/rss+xml"/>
  <description>Le blog qui parle du web, de zope, plone, mais aussi d'ergonomie, d'accessibilité et des applications web2.0. Vu par l'œil pertinent de Jean-Sébastien Mansart, mais toujours avec de vrai morceaux de blagounettes.</description>
  <language>fr</language>
  <pubDate>Tue, 07 Oct 2008 12:38:57 +0200</pubDate>
  <copyright>Jean-Sébastien Mansart</copyright>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Dotclear</generator>
  
    
  <item>
    <title>Plone soutient l'industrie du sexe ?</title>
    <link>http://www.jsmansart.com/post/plone-soutient-lindustrie-du-sexe</link>
    <guid isPermaLink="false">urn:md5:a6b91833a484d96ae9d774020b900fae</guid>
    <pubDate>Mon, 25 Feb 2008 19:32:00 +0100</pubDate>
    <dc:creator>Jean-Sébastien Mansart</dc:creator>
        <category>Lu chez les autres</category>
        <category>cms</category><category>faille</category><category>open-source</category><category>plone</category><category>python</category><category>securite</category>    
    <description>&lt;p&gt;&lt;a href=&quot;http://www.plone.org&quot; hreflang=&quot;en&quot;&gt;&lt;img src=&quot;http://www.jsmansart.com/public/logos/plone-logo-64-white-bg.png&quot; alt=&quot;Logo Plone&quot; style=&quot;float:left; margin: 0 1em 1em 0;&quot; /&gt;&lt;/a&gt; En effet, &lt;a href=&quot;http://www.plone.org&quot; hreflang=&quot;en&quot;&gt;Plone&lt;/a&gt; serait devenu, bien malgré lui, l'un des premiers fournisseurs de liens pour adultes.&lt;br /&gt;
Les enfants, fermez les yeux, ce n'est pas pour vous…&lt;/p&gt;    &lt;p&gt;J'en parlais, il y a quelques mois, &lt;a href=&quot;http://www.jsmansart.com/post/Failles-de-securite-dans-les-CMS&quot; hreflang=&quot;fr&quot;&gt;les failles de sécurité de Plone&lt;/a&gt; sont rares, mais lorsque l'on en découvre une et qu'elle est exploitée, elle peut faire mal.&lt;/p&gt;


&lt;p&gt;Cette fois, &lt;a href=&quot;http://plone.org/about/security/advisories/cve-2007-5741&quot; hreflang=&quot;en&quot;&gt;la faille de sécurité&lt;/a&gt; s'identifie au niveau du portal_memberdata. Il était possible d'exécuter du code python grâce aux modules statusmessage et linkintegrity.&lt;br /&gt;
Pour vérifier si votre site plone est impacté, sous google tapez :&lt;br /&gt;
&lt;code&gt;site:monsite.com inurl:portal_memberdata sex&lt;/code&gt;&lt;br /&gt;
et vous aurez directement la réponse sous les yeux.&lt;br /&gt;
N'oubliez pas bien sur de bookmarker les différents liens contenus dans les pages pour une consultation ultérieure…&lt;/p&gt;


&lt;p&gt;Pour supprimer et éviter de se faire spammer, la première chose est de supprimer le droit &amp;quot;add portal member&amp;quot; aux anonymes, de supprimer tous les comptes indésirables, puis depuis la ZMI dans le portal_memberdata de purger le contenu.&lt;br /&gt;
Bien entendu, cette méthode n'est qu'une rustine, la meilleur façon est encore de mettre à jour votre version de plone, soit en 3.0.6 soit en 2.5.5&lt;/p&gt;


&lt;p&gt;&lt;strong&gt;Avez-vous déjà été confronté à des failles de sécurité ?&lt;/strong&gt;&lt;/p&gt;


&lt;p&gt;Via &lt;a href=&quot;http://blog.trendmicro.com/plone-sex-anyone/&quot; hreflang=&quot;en&quot;&gt;TrendLabs&lt;/a&gt;&lt;/p&gt;    &lt;hr /&gt;&lt;p&gt;&lt;small&gt;Article original &#233;crit par Jean-S&#233;bastien Mansart et publi&#233; sur &lt;a href='http://www.jsmansart.com'&gt;Jean-S&#233;bastien
 Mansart .com&lt;/a&gt; | &lt;a href='http://www.jsmansart.com/post/plone-soutient-lindustrie-du-sexe'&gt;Lien direct vers l'article&lt;/a&gt; | Si vous lisez cet article dans son int&#233;gralit&#233; sur un autre site que
&lt;a href='http://www.jsmansart.com'&gt;Jean-S&#233;bastien Mansart .com&lt;/a&gt; c'est qu'il a &#233;t&#233; reproduit ill&#233;galement et sans autorisation. Merci de le sig
naler &#224; son auteur original &lt;a href='mailto:jean-sebastien.mansart@laposte.net'&gt;en cliquant ici&lt;/a&gt; | &amp;copy; jsmansart.com.&lt;/small&gt;
    </description>
    
    
    
          <comments>http://www.jsmansart.com/post/plone-soutient-lindustrie-du-sexe#comment-form</comments>
      <wfw:comment>http://www.jsmansart.com/post/plone-soutient-lindustrie-du-sexe#comment-form</wfw:comment>
      <wfw:commentRss>http://www.jsmansart.com/feed/rss2/comments/619</wfw:commentRss>
      </item>
    
  <item>
    <title>La Miss Webmate janvier 2008</title>
    <link>http://www.jsmansart.com/post/La-Miss-Webmate-janvier-2008</link>
    <guid isPermaLink="false">urn:md5:4dcca6cf5a3ebe16f5d68f9fee7b7e82</guid>
    <pubDate>Thu, 03 Jan 2008 14:04:00 +0100</pubDate>
    <dc:creator>Jean-Sébastien Mansart</dc:creator>
        <category>Miss Webmate</category>
        <category>miss-webmate</category><category>open-source</category><category>python</category>    
    <description>&lt;p&gt;&lt;img src=&quot;http://www.jsmansart.com/public/logos/.sexy-miss-webmate_t.jpg&quot; alt=&quot;La miss webmate sexy du mois&quot; style=&quot;float:left; margin: 0 1em 1em 0;&quot; /&gt; L'année 2008 commence, et tout le monde prend de &lt;a href=&quot;http://python.org/&quot; hreflang=&quot;en&quot;&gt;bonnes résolutions&lt;/a&gt;.&lt;/p&gt;    &lt;p&gt;&lt;img src=&quot;http://www.jsmansart.com/public/miss-webmate/miss-webmate-2008-01.jpg&quot; alt=&quot;miss webmate janvier 2008&quot; style=&quot;display:block; margin:0 auto;&quot; /&gt;&lt;/p&gt;    &lt;hr /&gt;&lt;p&gt;&lt;small&gt;Article original &#233;crit par Jean-S&#233;bastien Mansart et publi&#233; sur &lt;a href='http://www.jsmansart.com'&gt;Jean-S&#233;bastien
 Mansart .com&lt;/a&gt; | &lt;a href='http://www.jsmansart.com/post/La-Miss-Webmate-janvier-2008'&gt;Lien direct vers l'article&lt;/a&gt; | Si vous lisez cet article dans son int&#233;gralit&#233; sur un autre site que
&lt;a href='http://www.jsmansart.com'&gt;Jean-S&#233;bastien Mansart .com&lt;/a&gt; c'est qu'il a &#233;t&#233; reproduit ill&#233;galement et sans autorisation. Merci de le sig
naler &#224; son auteur original &lt;a href='mailto:jean-sebastien.mansart@laposte.net'&gt;en cliquant ici&lt;/a&gt; | &amp;copy; jsmansart.com.&lt;/small&gt;
    </description>
    
    
    
          <comments>http://www.jsmansart.com/post/La-Miss-Webmate-janvier-2008#comment-form</comments>
      <wfw:comment>http://www.jsmansart.com/post/La-Miss-Webmate-janvier-2008#comment-form</wfw:comment>
      <wfw:commentRss>http://www.jsmansart.com/feed/rss2/comments/588</wfw:commentRss>
      </item>
    
  <item>
    <title>Failles de sécurité dans les CMS</title>
    <link>http://www.jsmansart.com/post/Failles-de-securite-dans-les-CMS</link>
    <guid isPermaLink="false">urn:md5:13b435afc14f39857a6163a0f0204cab</guid>
    <pubDate>Thu, 04 Oct 2007 10:02:00 +0200</pubDate>
    <dc:creator>Jean-Sébastien Mansart</dc:creator>
        <category>Lu chez les autres</category>
        <category>cms</category><category>drupal</category><category>faille</category><category>joomla</category><category>mambo</category><category>php</category><category>plone</category><category>python</category><category>securite</category><category>statistiques</category><category>zope</category>    
    <description>&lt;p&gt;&lt;img src=&quot;http://www.jsmansart.com/public/logos/dohs.gif&quot; alt=&quot;department of homeland security&quot; style=&quot;float:left; margin: 0 1em 1em 0;&quot; /&gt; John Stahl publie un article où il liste &lt;a href=&quot;http://blogs.onenw.org/jon/archives/2007/02/18/open-source-cms-security-part-ii/&quot; hreflang=&quot;en&quot;&gt;le nombre de failles de sécurité connus dans les CMS open source et langages associés&lt;/a&gt;.&lt;/p&gt;    &lt;p&gt;Voici la liste, avec entre parenthèses le nombres de failles connues en juillet, et ensuite le pourcentage de progression :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Plone: 3 (3) - 0%&lt;/li&gt;
&lt;li&gt;Drupal: 55 (22) - 150%&lt;/li&gt;
&lt;li&gt;Mambo: 91 (31) - 194%&lt;/li&gt;
&lt;li&gt;Joomla!: 74 (20) - 270%&lt;/li&gt;
&lt;li&gt;Zope: 16 (15) - 6%&lt;/li&gt;
&lt;li&gt;MySQL: 129 (99) - 30%&lt;/li&gt;
&lt;li&gt;Python: 18 (17) - 5%&lt;/li&gt;
&lt;li&gt;Rails: 2 (0) - infinite&lt;/li&gt;
&lt;li&gt;PHP: 2271 (1258) - 80%&lt;/li&gt;
&lt;li&gt;Ruby: 14 (7) - 100%&lt;/li&gt;
&lt;li&gt;Perl: 105 (97) - 8%&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Zope, Plone et Python s'en sortent très bien, ainsi que Ruby et Rails. Par contre, PHP, Joomla!, Mambo et Drupal explosent...&lt;/p&gt;


&lt;p&gt;Il faut cependant faire la part des choses, ces données ne veulent pas dire grand chose sorties de leur contexte.&lt;br /&gt;
Cela peut néanmoins être pris à titre indicatif lors de l'adoption d'un CMS.&lt;/p&gt;    &lt;hr /&gt;&lt;p&gt;&lt;small&gt;Article original &#233;crit par Jean-S&#233;bastien Mansart et publi&#233; sur &lt;a href='http://www.jsmansart.com'&gt;Jean-S&#233;bastien
 Mansart .com&lt;/a&gt; | &lt;a href='http://www.jsmansart.com/post/Failles-de-securite-dans-les-CMS'&gt;Lien direct vers l'article&lt;/a&gt; | Si vous lisez cet article dans son int&#233;gralit&#233; sur un autre site que
&lt;a href='http://www.jsmansart.com'&gt;Jean-S&#233;bastien Mansart .com&lt;/a&gt; c'est qu'il a &#233;t&#233; reproduit ill&#233;galement et sans autorisation. Merci de le sig
naler &#224; son auteur original &lt;a href='mailto:jean-sebastien.mansart@laposte.net'&gt;en cliquant ici&lt;/a&gt; | &amp;copy; jsmansart.com.&lt;/small&gt;
    </description>
    
    
    
          <comments>http://www.jsmansart.com/post/Failles-de-securite-dans-les-CMS#comment-form</comments>
      <wfw:comment>http://www.jsmansart.com/post/Failles-de-securite-dans-les-CMS#comment-form</wfw:comment>
      <wfw:commentRss>http://www.jsmansart.com/feed/rss2/comments/560</wfw:commentRss>
      </item>
    
  <item>
    <title>Optimisation d'un site Plone</title>
    <link>http://www.jsmansart.com/post/Optimisation-dun-site-Plone</link>
    <guid isPermaLink="false">urn:md5:e19f79f31d1a470c90cb83a58ed8dbd6</guid>
    <pubDate>Tue, 24 Jul 2007 11:12:00 +0200</pubDate>
    <dc:creator>Jean-Sébastien Mansart</dc:creator>
        <category>Plone</category>
        <category>optimisation</category><category>plone</category><category>python</category><category>zope</category>    
    <description>&lt;p&gt;&lt;img src=&quot;http://www.jsmansart.com/public/logos/plone.jpg&quot; alt=&quot;Plone&quot; style=&quot;float:left; margin: 0 1em 1em 0;&quot; /&gt; Un site web Plone est plus lourd et plus lent qu'un site développé (correctement) en PHP/MySQL. C'est un fait. Forcément, il n'y a pas toute la machinerie Zope derrière : gestion des droits, groupes et utilisateurs, moteur de worklows, etc... Un site développé en PHP/MySQL peut ne prendre que quelques lignes de code, alors que le même site fait avec Zope / Plone sera beaucoup plus gros, et de ce fait, gourmand en ressources.&lt;br /&gt;
Pour un petit site, la différence n'est pas énorme, par contre, si le site commence à être conséquent, optimiser son code devient crucial.&lt;/p&gt;


&lt;p&gt;Pour optimiser un site Plone, on peut identifier trois phases :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Utiliser de bonnes pratiques de développement&lt;/li&gt;
&lt;li&gt;Répartir la charge&lt;/li&gt;
&lt;li&gt;Mettre en place un système de cache&lt;/li&gt;
&lt;/ol&gt;    &lt;h2&gt;Utiliser de bonnes pratiques de développement&lt;/h2&gt;


&lt;h4&gt;Le portal_catalog&lt;/h4&gt;


&lt;p&gt;Lorsque l'on veut accéder à un objet, Zope doit &amp;quot;réveiller&amp;quot; cet objet, malheureusement, &amp;quot;réveiller&amp;quot; un objet est très coûteux. Cela l'est encore plus lorsque l'on veut afficher une liste et que chaque objet de cette liste est &amp;quot;réveillé&amp;quot;.&lt;/p&gt;


&lt;p&gt;Pour éviter de &amp;quot;réveiller&amp;quot; inutilement les objets, Plone dispose d'un catalogue : le portal_catalog.&lt;br /&gt;
Il permet d'indexer les objets (index) et de stocker certains champs des objets (metadata). Pour afficher une liste d'objets avec leur titre et un lien vers l'objet en lui même, plus besoin de &amp;quot;réveiller&amp;quot; tous les objets de la liste.&lt;br /&gt;
Les index vont vous servir lors des recherches dans le catalogue, alors que les metadata permettent d'accéder aux données de l'objet sans avoir à le &amp;quot;réveiller&amp;quot;. Il est très simple de rajouter des index et des metadata dans le portal_catalog, que ce soit directement depuis la ZMI ou programmatiquement.&lt;/p&gt;


&lt;p&gt;Au lieu de : &lt;br /&gt;
&lt;code&gt;&amp;lt;a tal:attributes=&amp;quot;href python:item.getObject().absolute_url()&amp;quot; tal:content=&amp;quot;item.getObject().title_or_id&amp;quot;&amp;gt;Mon Objet&amp;lt;/a&amp;gt;&lt;/code&gt;&lt;/p&gt;


&lt;p&gt;Préférez plutôt : &lt;br /&gt;
&lt;code&gt;&amp;lt;a tal:attributes=&amp;quot;href item/getURL&amp;quot; tal:content=&amp;quot;item/Title&amp;quot;&amp;gt;Mon objet&amp;lt;/a&amp;gt;&lt;/code&gt;&lt;/p&gt;


&lt;h4&gt;Les scripts python&lt;/h4&gt;


&lt;p&gt;Lorsque vous créez des scripts python, au lieu de passer par la ZMI qui va faire plusieurs vérifications à chaque instructions, stockez les directement sur le File System, dans votre produit. Non seulement vous gagnerez en performance, mais en aussi en productivité. C'est beaucoup plus simple d'éditer un script python depuis son éditeur de texte favoris que depuis un formulaire web.&lt;/p&gt;


&lt;p&gt;Une autre méthode est de créer un tool, ou d'utiliser les vues Zope 3 (via Five)&lt;/p&gt;


&lt;h2&gt;Répartir la charge&lt;/h2&gt;


&lt;p&gt;De base, nous avons une instance Zope avec sa ZODB (Zope Object Data Base). L'instance Zope reçoit les requêtes HTTP, effectue le rendu de la page et s'occupe de stocker les objets dans la ZODB.&lt;/p&gt;


&lt;p&gt;&lt;img src=&quot;http://www.jsmansart.com/public/optimisation%20plone/requete_zope_simple.jpg&quot; alt=&quot;instance zope simple&quot; style=&quot;display:block; margin:0 auto;&quot; /&gt;&lt;br /&gt;
&lt;em&gt;image provenant de la présentation de &lt;a href=&quot;http://www.pilotsystems.net/&quot; hreflang=&quot;fr&quot;&gt;Pilot Systems&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;


&lt;h4&gt;Une installation simple&lt;/h4&gt;


&lt;p&gt;Une façon d'optimiser très simplement un site Plone est de mettre un serveur Apache en frontal devant l'instance Zope. Cette installation est suffisante pour les petits site à faible trafic. Par contre, il n'y a pas de tolérance de panne, et la montée en charge reste faible. Les performances du site ne sont que très faiblement accrues.&lt;/p&gt;


&lt;p&gt;&lt;img src=&quot;http://www.jsmansart.com/public/optimisation%20plone/apache_et_zope.jpg&quot; alt=&quot;apache + zope&quot; style=&quot;display:block; margin:0 auto;&quot; /&gt;&lt;br /&gt;
&lt;em&gt;image provenant de la présentation de &lt;a href=&quot;http://www.pilotsystems.net/&quot; hreflang=&quot;fr&quot;&gt;Pilot Systems&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;


&lt;h4&gt;Répartition de charge avec ZEO&lt;/h4&gt;


&lt;p&gt;ZEO (Zope Enterprise Object), permet de diviser Zope en deux :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Une partie serveur pour stocker les données&lt;/li&gt;
&lt;li&gt;Une partie cliente pour effectuer le rendu des pages et recevoir les requêtes HTTP.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;http://www.jsmansart.com/public/optimisation%20plone/requete_zeo.jpg&quot; alt=&quot;ZEO&quot; style=&quot;display:block; margin:0 auto;&quot; /&gt;&lt;br /&gt;
&lt;em&gt;image provenant de la présentation de &lt;a href=&quot;http://www.pilotsystems.net/&quot; hreflang=&quot;fr&quot;&gt;Pilot Systems&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;


&lt;p&gt;L'avantage ici, est que l'on peut créer autant de clients que l'on veut. Le serveur ZEO peut être sur une machine physique différente des autres clients ZEO, et chaque client peut aussi être sur une machine physique différente.&lt;br /&gt;
Les clients sont tous relié au serveur ZEO. On peut répondre très facilement à une monté en charge : il suffit de rajouter des clients ZEO.&lt;/p&gt;


&lt;p&gt;On peut dédier un client (ou plusieurs) pour l'administration du site, et ainsi améliorer les performances pour l'administration du site, sans dégrader les performances coté &amp;quot;publique&amp;quot;.&lt;/p&gt;


&lt;h2&gt;Mettre en place un système de cache&lt;/h2&gt;


&lt;p&gt;La première solution est de mettre en place un serveur SQUID qui permet de gérer du cache. Il limite les requêtes vers les clients ZEO en retournant les pages en cache.&lt;/p&gt;


&lt;p&gt;En complément de SQUID, Pound permet de répartir la charge entre les différents clients ZEO, (à noter que SQUID peut le faire aussi). Si un des clients ZEO n'est plus accessible, Pound redirige automatiquement les requêtes vers un autre client disponible.&lt;/p&gt;


&lt;p&gt;&lt;img src=&quot;http://www.jsmansart.com/public/optimisation%20plone/squid_pound_et_zeo.jpg&quot; alt=&quot;squid + pound + zeo&quot; style=&quot;display:block; margin:0 auto;&quot; /&gt;&lt;br /&gt;
&lt;em&gt;image provenant de la présentation de &lt;a href=&quot;http://www.pilotsystems.net/&quot; hreflang=&quot;fr&quot;&gt;Pilot Systems&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;


&lt;p&gt;Cette infrastructure est optimum, elle permet d'avoir un site complètement optimisé, avec très peu de requêtes traitées par Zope, le cache se situant en amont.&lt;br /&gt;
Si une panne survient sur un des clients ZEO, les autres prennent le relais, cela nous permet de réparer le client défectueux sans que les utilisateurs soient pénalisés.&lt;br /&gt;
Si l'audience du site augmente, il suffit de rajouter un ou plusieurs clients ZEO.&lt;/p&gt;


&lt;p&gt;L'optimisation d'un site Plone passe par beaucoup d'étape, que ce soit au niveau de l'infrastructure comme du code produit. Heureusement, pour l'infrastructure, on peut commencer juste par avoir un apache en frontal, puis ajouter des clients ZEO et un SQUID si le besoin se fait ressentir.&lt;br /&gt;
Il est par contre plus fastidieux de revenir sur du code produit, il faut donc tout de suite adopter de &lt;a href=&quot;http://plone.org/documentation/tutorial/best-practices&quot; hreflang=&quot;en&quot;&gt;bonnes pratiques de programmation&lt;/a&gt;.&lt;/p&gt;


&lt;p&gt;Merci à Sylvain Viollon de &lt;a href=&quot;http://www.pilotsystems.net/&quot; hreflang=&quot;fr&quot;&gt;Pilot Systems&lt;/a&gt; pour &lt;a href=&quot;http://www.solutionslinux.fr/document_conferencier/45deb3e86a362.pdf&quot; hreflang=&quot;fr&quot;&gt;sa présentation&lt;/a&gt; lors des Solutions Linux 2007.&lt;/p&gt;    &lt;hr /&gt;&lt;p&gt;&lt;small&gt;Article original &#233;crit par Jean-S&#233;bastien Mansart et publi&#233; sur &lt;a href='http://www.jsmansart.com'&gt;Jean-S&#233;bastien
 Mansart .com&lt;/a&gt; | &lt;a href='http://www.jsmansart.com/post/Optimisation-dun-site-Plone'&gt;Lien direct vers l'article&lt;/a&gt; | Si vous lisez cet article dans son int&#233;gralit&#233; sur un autre site que
&lt;a href='http://www.jsmansart.com'&gt;Jean-S&#233;bastien Mansart .com&lt;/a&gt; c'est qu'il a &#233;t&#233; reproduit ill&#233;galement et sans autorisation. Merci de le sig
naler &#224; son auteur original &lt;a href='mailto:jean-sebastien.mansart@laposte.net'&gt;en cliquant ici&lt;/a&gt; | &amp;copy; jsmansart.com.&lt;/small&gt;
    </description>
    
    
    
          <comments>http://www.jsmansart.com/post/Optimisation-dun-site-Plone#comment-form</comments>
      <wfw:comment>http://www.jsmansart.com/post/Optimisation-dun-site-Plone#comment-form</wfw:comment>
      <wfw:commentRss>http://www.jsmansart.com/feed/rss2/comments/537</wfw:commentRss>
      </item>
    
  <item>
    <title>Plone et LDAP : mode d'emploi</title>
    <link>http://www.jsmansart.com/post/Plone-et-LDAP-mode-demploi</link>
    <guid isPermaLink="false">urn:md5:8daa249bc5e37d80d875c515b29b2830</guid>
    <pubDate>Thu, 05 Jul 2007 17:44:00 +0200</pubDate>
    <dc:creator>Jean-Sébastien Mansart</dc:creator>
        <category>Plone</category>
        <category>cms</category><category>ldap</category><category>plone</category><category>python</category><category>zope</category>    
    <description>&lt;p&gt;Depuis la version 2.5, Plone intègre un module d'authentification
extensible grâce à des plugins : PAS (PluggableAuthService). Celà
permet de s'identifier à un site Plone depuis (potentiellement)
n'importe quelle source : MySQL, openID, LDAP, etc...&lt;/p&gt;
&lt;p&gt;Je vais ici expliquer comment connecter un site Plone à une base
LDAP afin de pouvoir s'identifier sur le site, modifier son mot de
passe depuis l'interface Plone, ajouter des utilisateurs depuis Plone
et sauvegarder des données utilisateurs dans le LDAP.&lt;/p&gt;
&lt;p&gt;Je part du principe que vous avez des connaissances en LDAP, que
vous savez ce qu'est un DN (Distinguished Name), comment créer un arbre
dans le LDAP, etc...&lt;/p&gt;    &lt;h2&gt;LDAP c'est quoi ?&lt;/h2&gt;
&lt;p&gt;D'après &lt;a href=&quot;http://fr.wikipedia.org/wiki/LDAP&quot;&gt;wikipédia&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Lightweight Directory Access Protocol (LDAP) est un protocole permettant l'interrogation et la modification des services d'annuaire. Ce protocole repose sur TCP/IP. Un annuaire LDAP respecte généralement
le modèle X.500 édicté par l'UIT-T : c'est une structure arborescente dont chacun des nœuds est constitué d'attributs associés à leurs valeurs.
&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Un LDAP est donc une base de données spécialisée pour le stockage d'information concernant des personnes et des groupes de personnes.&lt;/p&gt;
&lt;br /&gt;
&lt;h2&gt;Ce qu'il vous faut&lt;/h2&gt;
&lt;p&gt;Pour connecter votre LDAP à votre site Plone, il vous faut :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Un serveur LDAP (&lt;a href=&quot;http://www.openldap.org/&quot;&gt;OpenLDAP&lt;/a&gt;, Active Directory, OpenDirectory, Lotus...)
&lt;/li&gt;
&lt;li&gt;
Un serveur &lt;a href=&quot;http://www.zope.org/&quot;&gt;Zope&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
Un site &lt;a href=&quot;http://www.plone.org/&quot;&gt;Plone&lt;/a&gt; de version 2.5.x
&lt;/li&gt;
&lt;li&gt;
Le produit &lt;a href=&quot;http://www.dataflake.org/software/ldapmultiplugins/&quot;&gt;LDAPMultiPlugins&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
Le produit &lt;a href=&quot;http://www.dataflake.org/software/ldapuserfolder/&quot;&gt;LDAPUserFolder&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
Le module python &lt;a href=&quot;http://sourceforge.net/project/showfiles.php?group_id=2072&quot;&gt;python-ldap&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Le LDAPUserFolder qui se trouve sur le site de &lt;a href=&quot;http://plone.org/products/ldapuserfolder&quot;&gt;Plone.org&lt;/a&gt; n'est pas à jour, il date du 30 novembre 2005. Faites bien attention d'utiliser celui fournit par &lt;a href=&quot;http://www.dataflake.org/software/ldapuserfolder/&quot;&gt;dataflake.org&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Copiez les deux produits LDAPMultiPlugins et LDAPUserFolder dans le dossier Products de votre instance, installez le module python-ldap, et démarrez votre serveur Zope.&lt;/p&gt;
&lt;br /&gt;
&lt;h2&gt;Configuration du Multi Plugin&lt;/h2&gt;
&lt;p&gt;Allez dans la ZMI (Zope Management Interface), ajoutez un site Plone et allez dans l'acl_users de votre site. Dans le menu déroulant, sélectionnez LDAP Multi Plugins et cliquez sur le bouton Add. Un formulaire vous demande plusieurs information à propos de votre LDAP :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
ID : pour identifier l'objet LDAP Multi Plugin qu'on est en train d'ajouter. (généralement, je le nomme LDAP)
&lt;/li&gt;
&lt;li&gt;
Title : un titre (LDAP Serveur)
&lt;/li&gt;
&lt;li&gt;
LDAP Server : là où se trouve votre serveur LDAP (localhost par exemple)
&lt;/li&gt;
&lt;li&gt;
Login Name Attribute : l'attribut qui servira d'identifiant pour se connecter au site (laissez la valeur par défaut pour le moment)
&lt;/li&gt;
&lt;li&gt;
User ID Attribute : l'attribut qui servira d'id pour les utilisateurs (laissez la valeur par défaut pour le moment)
&lt;/li&gt;
&lt;li&gt;
RDN Attribute : l'attribut pour le Relative Distinguished Name (laissez la valeur par défaut pour le moment)
&lt;/li&gt;
&lt;li&gt;
Users Base DN : où sont stockés vos utilisateurs dans le LDAP
&lt;/li&gt;
&lt;li&gt;
Group storage : vous pouvez choisir de stocker les groupes soit sur le LDAP, soit dans Plone directement
&lt;/li&gt;
&lt;li&gt;
Groups Base DN : si vous choisissez de stocker les groupes sur le LDAP, indiquez dans quelle branche ils se trouvent
&lt;/li&gt;
&lt;li&gt;
Manager DN : indiquez où se trouve l'admin LDAP (ou=admin,dc=mon,dc=ldap,dc=com par exemple) et saisissez sont mot de passe par la même occasion
&lt;/li&gt;
&lt;li&gt;
User password encryption : le type d'encryption pour les mots de passe
&lt;/li&gt;
&lt;li&gt;
Default User Roles : le rôle par défaut des utilisateurs logué (Anonymous par défaut, on peut leur donner le rôle Member par exemple)
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img style=&quot;margin: 0 auto; display: block;&quot; alt=&quot;&quot; src=&quot;http://www.jsmansart.com/public/images%20ldap/config_ldap.jpg&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Une fois les champs saisis, validez le formulaire. On se retrouve dans l'acl_users, cliquez sur votre LDAP Multi Plugins que vous venez d'ajouter.&lt;/p&gt;
&lt;p&gt;On va maintenant faire le lien entre les attributs LDAP et les attributs de vos utilisateurs dans Plone.&lt;/p&gt;
&lt;br /&gt;
&lt;h2&gt;Autentification&lt;/h2&gt;
&lt;p&gt;Cochez au passage les options &amp;quot;Authentication&amp;quot; et &amp;quot;Properties&amp;quot; et validez, puis cliquez directement sur le lien &amp;quot;Authentication&amp;quot;. Dans le cadre de droite, faite remonter LDAP tout en haut. Faites la même chose pour &amp;quot;Properties&amp;quot;. Ca permet de dire ce qu'on veut faire avec le LDAP. Là on lui indique que l'on veut pouvoir s'identifier et qu'on veut récupérer les propriétés (attributs) des utilisateurs stockés dans le LDAP.&lt;/p&gt;
&lt;br /&gt;&lt;p&gt;&lt;img style=&quot;margin: 0 auto; display: block;&quot; alt=&quot;&quot; src=&quot;http://www.jsmansart.com/public/images%20ldap/activate.jpg&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img style=&quot;margin: 0 auto; display: block;&quot; alt=&quot;&quot; src=&quot;http://www.jsmansart.com/public/images%20ldap/active_plugin.jpg&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Dans l'onglet &amp;quot;contents&amp;quot;, cliquez sur acl_users (LDAP Serveur). Vous vous retrouvez à la configuration que vous aviez saisi juste auparavant. Allez dans l'onglet LDAP Schema. C'est à partir de là que l'on va &amp;quot;mapper&amp;quot; les attributs LDAP avec les champs Plone.&lt;/p&gt;
&lt;p&gt;&lt;img style=&quot;margin: 0 auto; display: block;&quot; alt=&quot;&quot; src=&quot;http://www.jsmansart.com/public/images%20ldap/ldap_schema.jpg&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Par exemple : l'attribut LDAP &amp;quot;mail&amp;quot; va être mappé sur le champ &amp;quot;email&amp;quot;, le &amp;quot;cn&amp;quot; sera mappé sur &amp;quot;fullname&amp;quot; etc...&lt;/p&gt;
&lt;p&gt;On peut même mapper la photo jpeg...&lt;/p&gt;
&lt;p&gt;Par contre, pas besoin de mapper le mot de passe.&lt;/p&gt;
&lt;p&gt;Ajoutez en priorité l'attribut qui vous servira pour le login, et notifiez le dans le champs &amp;quot;Friendly Name&amp;quot;,&lt;/p&gt;
&lt;p&gt;Revenez dans l'onglet &amp;quot;configure&amp;quot;, et spécifiez maintenant:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Login Name Attribute
&lt;/li&gt;
&lt;li&gt;
User ID Attribute
&lt;/li&gt;
&lt;li&gt;
RDN Attribute
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pour ces trois champs indiquez lui l'attribut que vous avez choisi pour le login.&lt;/p&gt;
&lt;p&gt;Une fois fait, allez dans l'onglet &amp;quot;users&amp;quot; et essayez de trouver un utilisateur pour tester que votre configuration fonctionne.&lt;/p&gt;
&lt;p&gt;Vous pouvez ensuite tenter de vous connecter sur votre site Plone avec un utilisateur contenu dans votre LDAP.&lt;/p&gt;
&lt;p&gt;La première partie est finie, c'était la partie facile. Pour la suite, il va falloir mettre les mains dans le cambouis.&lt;/p&gt;
&lt;br /&gt;
&lt;h2&gt;Pour aller plus loin&lt;/h2&gt;
&lt;p&gt;Maintenant qu'on peut se connecter sur un site Plone avec des utilisateurs stockés dans un LDAP, on va s'amuser un peu à triturer tout ça.&lt;/p&gt;
&lt;p&gt;Vous voulez pouvoir changer votre mot de passe depuis Plone ?&lt;/p&gt;
&lt;p&gt;Vous avez spécifié des attributs dans le LDAP et vous voudriez non seulement les voir dans votre profil, mais en plus vous voulez pouvoir modifier ces valeurs ?&lt;/p&gt;
&lt;p&gt;Vous voulez ajouter des utilisateurs depuis Plone ?&lt;/p&gt;
&lt;p&gt;Pas de soucis, c'est là que ça commence à devenir intéressant.&lt;/p&gt;
&lt;p&gt;De base, le Multi Plugin ne prend pas en charge la modification du mot de passe, ni l'ajout d'utilisateur. Il faut donc &lt;a href=&quot;http://antiloop.plone.org/LDAPMultiPlugins-plone.org.patch&quot;&gt;patcher&lt;/a&gt; pour lui donner de nouvelles fonctionnalités :&lt;/p&gt;
&lt;p&gt;
&lt;code&gt;
# On se place dans le dossier Products :&lt;br /&gt;
cd mon_instance/Products&lt;br /&gt;
# On récupère le patch :&lt;br /&gt;
wget http://antiloop.plone.org/LDAPMultiPlugins-plone.org.patch&lt;br /&gt;
# On va dans le dossier du produit :&lt;br /&gt;
cd LDAPMultiPlugins&lt;br /&gt;
# On applique le patch :&lt;br /&gt;
patch -p0 &amp;lt; ../LDAPMultiPlugins-plone.org.patch
&lt;/code&gt;
&lt;/p&gt;
&lt;p&gt;Et après on regarde un peu ce qui a été fait. On corrige un peu les erreurs qui se sont glissées : les déclarations de sécurité ne sont pas bonnes dans le fichier LDAPMultiPlugin.py pour les méthodes doChangeUser, doDeleteUser, etc... (je sais pas si ça joue un grand rôle, mais bon...)&lt;/p&gt;
&lt;p&gt;On redémarre le serveur zope, et on remarque que l'on a de nouvelles possibilité dans notre LDAP Multi Plugin. Cochez &amp;quot;User_Management&amp;quot; et faites monter &amp;quot;LDAP&amp;quot; en haut de la liste comme tout à l'heure.&lt;/p&gt;
&lt;br /&gt;
&lt;h3&gt;Changement du mot de passe :&lt;/h3&gt;
&lt;p&gt;Depuis le site Plone, allez dans vos préférences, et allez sur le formulaire pour changer votre mot de passe. Testez, et normalement, ça ne marche pas.
&lt;br /&gt;Normal, dans la classe MembershipTool (Products.CMFPlone.MembershipTool) la méthode _findUsersAclHome n'arrive pas à trouver l'acl_users à utiliser.&lt;/p&gt;
&lt;p&gt;Il faut donc faire un MonkeyPatch :&lt;/p&gt;
&lt;p&gt;
&lt;code&gt;
from Products.CMFPlone.MembershipTool import MembershipTool&lt;br /&gt;
from Products.CMFCore.utils import getToolByName&lt;br /&gt;
&lt;br /&gt;
def _findUsersAclHome(self, userid):&lt;br /&gt;
    portal = getToolByName(self, 'portal_url').getPortalObject()&lt;br /&gt;
    acl_users=portal.acl_users&lt;br /&gt;
    parent = acl_users.LDAP.acl_users&lt;br /&gt;
    return parent&lt;br /&gt;
&lt;br /&gt;
MembershipTool._findUsersAclHome = _findUsersAclHome
&lt;/code&gt;
&lt;/p&gt;
&lt;p&gt;La ligne &lt;code&gt;parent = acl_users.LDAP.acl_users&lt;/code&gt; spécifie implicitement où se situe l'acl_users.&lt;/p&gt;
&lt;p&gt;On redémarre le serveur, et hop, miracle ça marche !&lt;/p&gt;
&lt;br /&gt;
&lt;h3&gt;Stockage d'informations utilisateur dans le LDAP :&lt;/h3&gt;
&lt;p&gt;On a vu au début qu'on pouvait mapper les attributs du LDAP sur les champs Plone. C'est bien, mais des fois, on voudrait pouvoir modifier les valeurs directement depuis Plone.&lt;/p&gt;
&lt;p&gt;Il faut déjà modifier le template personalize_form.pt pour faire afficher les champs que l'on veut.&lt;/p&gt;
&lt;p&gt;Ensuite il faut créer une External Method qui va mettre à jour le LDAP :&lt;/p&gt;
&lt;p&gt;
&lt;code&gt;
from os import curdir&lt;br /&gt;
from os.path import join, abspath, dirname, split&lt;br /&gt;
import os.path&lt;br /&gt;
import string&lt;br /&gt;
import ldap&lt;br /&gt;
import ldap.modlist&lt;br /&gt;
from Products.CMFCore.utils import getToolByName&lt;br /&gt;
from random import Random&lt;br /&gt;
&lt;br /&gt;
global username&lt;br /&gt;
global password&lt;br /&gt;
global baseDN&lt;br /&gt;
username = &amp;quot;cn=admin,dc=exemple,dc=fr&amp;quot;&lt;br /&gt;
password = 'admin'&lt;br /&gt;
baseDN = &amp;quot;ou=personnes, dc=exemple, dc=fr&amp;quot;&lt;br /&gt;
&lt;br /&gt;
def connexionLdap(self):&lt;br /&gt;
    try:&lt;br /&gt;
        l = ldap.open(&amp;quot;127.0.0.1&amp;quot;)&lt;br /&gt;
        l.protocol_version = ldap.VERSION3&lt;br /&gt;
        return l&lt;br /&gt;
    except ldap.LDAPError, e:&lt;br /&gt;
        print e&lt;br /&gt;
&lt;br /&gt;
def setMonInfo(self, uid, value):&lt;br /&gt;
    l = self.connexionLdap()&lt;br /&gt;
    modlist = [(2, 'monChamp', str(value))]&lt;br /&gt;
&lt;br /&gt;
    searchScope = ldap.SCOPE_SUBTREE&lt;br /&gt;
    retrieveAttributes = None&lt;br /&gt;
    searchFilter = &amp;quot;uid=&amp;quot;+uid&lt;br /&gt;
    ldap_result_id = l.search(baseDN, searchScope, searchFilter, retrieveAttributes)&lt;br /&gt;
    result_type, result_data = l.result(ldap_result_id, 0)&lt;br /&gt;
    dn = result_data[0][0]&lt;br /&gt;
    try:&lt;br /&gt;
        l.simple_bind(username, password)&lt;br /&gt;
        l.modify_s(dn, modlist)&lt;br /&gt;
    except ldap.LDAPError, e:&lt;br /&gt;
        print e&lt;br /&gt;
&lt;/code&gt;
&lt;/p&gt;
&lt;p&gt;Dans le fichier personalize.cpy on rajoute la ligne suivante en dessous de la déclaration de la variable member :&lt;/p&gt;
&lt;p&gt;&lt;code&gt;uid = member.getProperty('email', None)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Et on ajoute le code suivant :&lt;/p&gt;
&lt;p&gt;&lt;code&gt;context.setMonInfo(uid, 'monChamp', monChamp)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Et voilà, avec ça, quand on modifie sa fiche, le LDAP est mis à jour aussi.&lt;/p&gt;
&lt;p&gt;Avec un peu de patience, on peu faire beaucoup d'autres choses, je n'ai abordé que quelques exemples de base, mais on a pu voir que lorsque l'on veut aller plus loin qu'une utilisation basique du serveur LDAP avec Plone, il faut mettre les mains dans le code, et c'est pas toujours joli joli...&lt;/p&gt;
&lt;p&gt;Le MonkeyPatch pour faire fonctionner la mise à jour du mot de passe est assez crade, je n'ai pas vraiment eu le temps de trouver une meilleur solution, ni pourquoi le code d'origine ne marche pas dans ce cas.&lt;/p&gt;
&lt;p&gt;Le fait que l'on doive patcher pour avoir de nouvelles fonctionnalités n'est pas un bon point non plus. Certes, normalement, Plone ne devrait pas être utilisé pour modifier les données du LDAP ni créer de nouveaux utilisateurs. Pourtant dans certains cas, c'est très pratique, et si en plus c'est le client qui le demande...&lt;/p&gt;
&lt;p&gt;J'ai l'impression que le LDAPMultiPlugin n'est pas assez mature, qu'il demande encore à être amélioré. Le plus dur au final est de trouver la documentation nécessaire, surtout lorsqu'on ne sait pas qu'il existe un patch.&lt;/p&gt;    &lt;hr /&gt;&lt;p&gt;&lt;small&gt;Article original &#233;crit par Jean-S&#233;bastien Mansart et publi&#233; sur &lt;a href='http://www.jsmansart.com'&gt;Jean-S&#233;bastien
 Mansart .com&lt;/a&gt; | &lt;a href='http://www.jsmansart.com/post/Plone-et-LDAP-mode-demploi'&gt;Lien direct vers l'article&lt;/a&gt; | Si vous lisez cet article dans son int&#233;gralit&#233; sur un autre site que
&lt;a href='http://www.jsmansart.com'&gt;Jean-S&#233;bastien Mansart .com&lt;/a&gt; c'est qu'il a &#233;t&#233; reproduit ill&#233;galement et sans autorisation. Merci de le sig
naler &#224; son auteur original &lt;a href='mailto:jean-sebastien.mansart@laposte.net'&gt;en cliquant ici&lt;/a&gt; | &amp;copy; jsmansart.com.&lt;/small&gt;
    </description>
    
    
    
          <comments>http://www.jsmansart.com/post/Plone-et-LDAP-mode-demploi#comment-form</comments>
      <wfw:comment>http://www.jsmansart.com/post/Plone-et-LDAP-mode-demploi#comment-form</wfw:comment>
      <wfw:commentRss>http://www.jsmansart.com/feed/rss2/comments/533</wfw:commentRss>
      </item>
    
  <item>
    <title>Plone 3.0</title>
    <link>http://www.jsmansart.com/post/Plone-30</link>
    <guid isPermaLink="false">urn:md5:a6d083cec4376ed99c424045735e4524</guid>
    <pubDate>Tue, 19 Jun 2007 12:43:00 +0200</pubDate>
    <dc:creator>Jean-Sébastien Mansart</dc:creator>
        <category>Plone</category>
        <category>cms</category><category>plone</category><category>python</category><category>zope</category>    
    <description>&lt;p&gt;&lt;img src=&quot;http://www.jsmansart.com/public/logos/plone.jpg&quot; alt=&quot;Plone&quot; style=&quot;float:left; margin: 0 1em 1em 0;&quot; /&gt; A l'heure du web 2.0 Plone prend un numéro d'avance, il ne révolutionne pas le web, mais offre de nouvelles sensations par rapport aux versions 2.x.&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;Plone, c'est quoi ?&lt;/strong&gt;&lt;/p&gt;


&lt;p&gt;&lt;a href=&quot;http://plone.org/&quot; hreflang=&quot;en&quot;&gt;Plone&lt;/a&gt; est un CMS (un Système de Gestion de Contenu) basé sur le serveur d'application &lt;a href=&quot;http://zope.org/&quot; hreflang=&quot;en&quot;&gt;Zope&lt;/a&gt;, lui même écrit en &lt;a href=&quot;http://python.org/&quot; hreflang=&quot;en&quot;&gt;Python&lt;/a&gt;. Il propose de base plusieurs types de contenu (document, dossier, news, agenda, lien, etc...) et il est possible d'en concevoir facilement de nouveaux. De même une large &lt;a href=&quot;http://plone.org/products&quot; hreflang=&quot;en&quot;&gt;bibliothèque de produits&lt;/a&gt; (types de contenu) est disponible sur le site.&lt;br /&gt;
Il propose de base une gestion des utilisateurs et des groupes, une gestion des droits, un workflow associé aux types de contenu, un moteur de recherche et une interface d'administration entièrement intégrée au site.&lt;/p&gt;


&lt;p&gt;Afin de voir rapidement et en image les possibilités de Plone, une petite vidéo :&lt;/p&gt;

&lt;p style=&quot;text-align:center;&quot;&gt;
&lt;object data=&quot;http://vpod.tv/jihaisse/209029/flash/videoPlayer&quot; width=&quot;320&quot; height=&quot;216&quot;&gt;
&lt;param name=&quot;movie&quot; value=&quot;http://vpod.tv/jihaisse/209029/flash/videoPlayer&quot; /&gt; 
&lt;param name=&quot;allowfullscreen&quot; value=&quot;true&quot; /&gt; 
 
&lt;/object&gt;
&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Plone 3, quoi de neuf ?&lt;/strong&gt;&lt;/p&gt;


&lt;p&gt;Plone 2 avait déjà commencé à intégrer de l'AJAX, notamment avec le live search, et la possibilité de réorganiser le contenu en faisant juste glisser les éléments.&lt;/p&gt;


&lt;p&gt;Aujourd'hui, Plone 3 va plus loin et offre une interface remaniée et bourée d'AJAX (enfin, pas tant que ça, faut pas abuser non plus), afin de simplifier l'ajout de contenu et éviter les chargements intempestif de pages.&lt;br /&gt;
On peut ainsi éditer un objet et modifier ses options en cliquant sur un onglet sans avoir à recharger de nouvelles pages. Il est possible d'éditer directement un objet sans cliquer sur le bouton &amp;quot;modifier&amp;quot;, mais en cliquant directement sur le champ que l'on souhaite modifier. Celà augmente grandement l'expérience utilisateur.&lt;/p&gt;


&lt;p&gt;Pour continuer avec le web2.0, Plone utilise depuis la version 2.5 le système d'autentification PAS (PluggableAuthService). Ce service permet d'ajouter des sources d'autentification (comme un serveur LDAP par exemple). Dans la version 3 de Plone, un plugin OpenID sera livré en standard, il sera donc possible d'utiliser ce service pour s'autentifier sur n'importe quel site Plone utilisant ce système.&lt;br /&gt;
Toujours dans le web2.0, un dashboard sera disponible, il permettra aux utilisateurs de se créer une page avec des portlets ou des widgets résumant l'activité du site. En gros chaque utilisateur aura une page personalisable à la netvibes et qui fera remonter toutes les infos du site que l'utilisateur aura choisi (nouveautés, documents à modérer, etc...)&lt;/p&gt;


&lt;p&gt;Plone proposait jusqu'a présent deux workflows différents, un par défaut et un pour les dossiers (en fait, ils étaient identiques), dans la version 3, Plone proposera 4 workflows par défaut (un pour les communautés, pour les intranets, pour la publication de contenu, pour les extranets) ainsi qu'une interface pour les configurer.&lt;br /&gt;
Le versionning est aussi à l'honneur, chaque objet aura un numéro de version, avec possibilité de revenir à une version antérieure. Un module permettant de faire du staging est aussi prévu. Ce sont les sites collaboratifs qui vont être content !&lt;/p&gt;


&lt;p&gt;Pour finir une petite vidéo (ouais !) . La présentation de Plone 3 par Olivier Deckmyn de chez Ingéniweb lors des Solutions Linux 2007, où j'étais présent d'ailleurs.&lt;/p&gt;

&lt;p style=&quot;text-align:center;&quot;&gt;
&lt;object data=&quot;http://vpod.tv/jihaisse/209061/flash/videoPlayer&quot; width=&quot;320&quot; height=&quot;240&quot;&gt;
&lt;param name=&quot;movie&quot; value=&quot;http://vpod.tv/jihaisse/209061/flash/videoPlayer&quot; /&gt; 
&lt;param name=&quot;allowfullscreen&quot; value=&quot;true&quot; /&gt; 
 
&lt;/object&gt;
&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Plone 3, est-ce que ça va marcher ?&lt;/strong&gt;&lt;/p&gt;


&lt;p&gt;Surement, on l'a déjà un peu testé en interne, ça a l'air très sympa et bien rigolo, par contre en production ça ne sera pas pour tout de suite, il faut laisser le temps au produit de mûrir encore (en fait, il faudrait déjà une version stable). Et ensuite préparer nos serveurs avec une nouvelle version de python et de zope.&lt;br /&gt;
A oui, car forcément, pour un Plone donné, il faut une version de Zope, et une version de Python, toujours plus récentes forcément et forcément pas toujours compatibles avec les anciennes versions... Que du bonheur !&lt;/p&gt;


&lt;p&gt;L'autre question que je me pose est aussi face aux utilisateurs, lorsque je forme les clients et qu'ils sont déjà perdu quand je leur dit qu'il faut cliquer sur le bouton modifier pour éditer un article et qu'ensuite il faut cliquer sur le bouton enregistrer, je me demande ce que ça va donner lorsqu'ils auront la possibilité d'éditer en live, soit ça passera bien, soit ils seront encore plus perdu.&lt;br /&gt;
L'AJAX, oui, mais finalement, n'est-ce pas réservé qu'aux &lt;em&gt;&amp;quot;early adopters&amp;quot;&lt;/em&gt; ?&lt;/p&gt;    &lt;hr /&gt;&lt;p&gt;&lt;small&gt;Article original &#233;crit par Jean-S&#233;bastien Mansart et publi&#233; sur &lt;a href='http://www.jsmansart.com'&gt;Jean-S&#233;bastien
 Mansart .com&lt;/a&gt; | &lt;a href='http://www.jsmansart.com/post/Plone-30'&gt;Lien direct vers l'article&lt;/a&gt; | Si vous lisez cet article dans son int&#233;gralit&#233; sur un autre site que
&lt;a href='http://www.jsmansart.com'&gt;Jean-S&#233;bastien Mansart .com&lt;/a&gt; c'est qu'il a &#233;t&#233; reproduit ill&#233;galement et sans autorisation. Merci de le sig
naler &#224; son auteur original &lt;a href='mailto:jean-sebastien.mansart@laposte.net'&gt;en cliquant ici&lt;/a&gt; | &amp;copy; jsmansart.com.&lt;/small&gt;
    </description>
    
    
    
          <comments>http://www.jsmansart.com/post/Plone-30#comment-form</comments>
      <wfw:comment>http://www.jsmansart.com/post/Plone-30#comment-form</wfw:comment>
      <wfw:commentRss>http://www.jsmansart.com/feed/rss2/comments/524</wfw:commentRss>
      </item>
    
  <item>
    <title>Lancement</title>
    <link>http://www.jsmansart.com/post/Lancement</link>
    <guid isPermaLink="false">urn:md5:a9dd51a5d0944ac0340cfd3b2ef6b663</guid>
    <pubDate>Tue, 29 May 2007 12:31:00 +0200</pubDate>
    <dc:creator>Jean-Sébastien Mansart</dc:creator>
        <category>Vie du blog</category>
        <category>accessibilite</category><category>blog</category><category>design</category><category>lancement</category><category>marketing</category><category>plone</category><category>python</category><category>zope</category>    
    <description>&lt;p&gt;Je profite de mon temps de pause déjeuner pour lancer mon blog &amp;quot;pro&amp;quot;, pour faire comme les grands et enfin devenir influent (d'ailleurs, ne le suis-je pas déjà ?).&lt;/p&gt;    &lt;p&gt;On remarquera un super nom de domaine qui claque, un thème pour dotclear 2 qui utilise du jQuery, il y a encore quelques finitions à faire, mais le gros est posé, il ne reste plus que le contenu.&lt;/p&gt;


&lt;p&gt;D'ailleurs, de quoi je vais parler ?&lt;br /&gt;
Principalement des technos web que j'utilise au quotidien :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://python.org/&quot; hreflang=&quot;en&quot;&gt;Python&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://zope.org/&quot; hreflang=&quot;en&quot;&gt;Zope&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://plone.org/&quot; hreflang=&quot;en&quot;&gt;Plone&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;D'autre sujets tournant - forcément - autour du web :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Design&lt;/li&gt;
&lt;li&gt;Accessibilité&lt;/li&gt;
&lt;li&gt;Marketing&lt;/li&gt;
&lt;li&gt;etc...&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Je me réserve un peu de champs libre tout de même, il ne faut pas s'enfermer.&lt;/p&gt;    &lt;hr /&gt;&lt;p&gt;&lt;small&gt;Article original &#233;crit par Jean-S&#233;bastien Mansart et publi&#233; sur &lt;a href='http://www.jsmansart.com'&gt;Jean-S&#233;bastien
 Mansart .com&lt;/a&gt; | &lt;a href='http://www.jsmansart.com/post/Lancement'&gt;Lien direct vers l'article&lt;/a&gt; | Si vous lisez cet article dans son int&#233;gralit&#233; sur un autre site que
&lt;a href='http://www.jsmansart.com'&gt;Jean-S&#233;bastien Mansart .com&lt;/a&gt; c'est qu'il a &#233;t&#233; reproduit ill&#233;galement et sans autorisation. Merci de le sig
naler &#224; son auteur original &lt;a href='mailto:jean-sebastien.mansart@laposte.net'&gt;en cliquant ici&lt;/a&gt; | &amp;copy; jsmansart.com.&lt;/small&gt;
    </description>
    
    
    
          <comments>http://www.jsmansart.com/post/Lancement#comment-form</comments>
      <wfw:comment>http://www.jsmansart.com/post/Lancement#comment-form</wfw:comment>
      <wfw:commentRss>http://www.jsmansart.com/feed/rss2/comments/520</wfw:commentRss>
      </item>
    
</channel>
</rss>
