1. Anlage eines Abonnenten "zmstest" im ZMI

2. Abonnent loggt sich mit seinem Passwort auf die geschützte Website ein

3. Abonnent ändert sein Passwort über ein Popup-Window, das nach Klick auf seinen Namen erscheint (hier gelagert im Template pageelement_Copyright).

4. Die DTML-Methode, die das Interface für das Passwort-Popup generiert sowie das Züruckschreiben der neuen User-Paramater übernimmt, benötigt die Zope-Proxyrole "Manager". Auf diese Weise besteht indirekt für den Abonnenten Zugriff auf diese Änderungsoptionen.

Hinweise zum DTML-Code


Die ZMS-User-Attribute werden mit den API-Funktionen aus dem Modul _accessmanager.py bearbeitet.
1. Lesen mit AccessManager.getUserAttr:
getUserAttr(self, user, name, default, flag=0)
2. Schreiben mit AccessManager.setUserAttr:
setUserAttr(self, user, name, value)

Der Folgende Code aus "manage_login" zeigt den Ausschnitt, mit dem das Zurückschreiben von Passwort und eMail-Adresse geschieht; da die User im standardmässigen acl_users-Objekt von Zope gelagert werden, sollten die Daten mit dessen Objekt-Inhalte synchronisiert werden (daher das doppelte Zurückschreiben).

.....
<dtml-if "REQUEST.get('btn')==getLangStr('BTN_CHANGE',manage_lang)">
  <dtml-call "setUserAttr(userObj,'email',email)">
  <dtml-call "setUserAttr(userObj,'password',password)">

  <dtml-call expr="REQUEST.set('name',AUTHENTICATED_USER.getUserName())">
  <dtml-call expr="REQUEST.set('password',password)"> 
  <dtml-call expr="REQUEST.set('confirm',confirm)">
  <dtml-call expr="acl_users.manage_users('Change',REQUEST)">

  <script language="JavaScript">
    <!--
      window.close();
      alert('Ihre Daten wurden modifiziert;\nSie werden nun 
      zum erneuten Login aufgefordert.');
      self.opener.location.reload();
      -->
  </script>
</dtml-if>
.....

Einbindung in die ZMS-Templates

Im Template pageelement_Copyright kann man z.B. folgende Zeile einfügen, die das popup per Javascript auslöst; die popup-Funktion open_function() ist eine Standard-Funktion, die im ZMS-typischen 'headScript'-Template mitgeliefert wird:

<dtml-var "getLangStr('YOU_ARE',manage_lang)"> angemeldet als: 
 <a href="javascript:open_function('manage_login?lang=<dtml-var 
 lang>&amp;manage_lang=<dtml-var manage_lang>',440,220,',resizable=yes,scrollbars=yes')" 
 class="zmiBottom"><b><dtml-var "string_maxlen(_.str(AUTHENTICATED_USER),15)"></b></a>

Erstellt von: Dr. Frank Hoffmann (für UDK-Berlin) , erstellt am:  27.06.2008 , zuletzt geändert: 29.09.2010