Sie sind hier:   » ZMS home » Dokumentation » Details » How-To » Zugriffsrechte » Intranet Passwort

Das Subscriber-Passwort auf Website / im Intranet eigenständig ändern lassen

Autor: Dr. Frank Hoffmann (für UDK-Berlin), 18.11.2005

Die Abonnenten-Rolle (ZMSSubscriber) kommt nicht in das ZMS-Redaktions-Interface und hat daher primaer nicht die Möglichkeit, das eigene Passwort zu ändern. Dies lässt sich durch eine DTML-Methode vermitteln, die über eine Zope-Proxyrole als "Manager" dazu berechtigt wird.

Download

application/x-zip-compressed   DTML-Code (gezippt) für das Login Pop-Up [0.2] (1KB)
Download mit rechter Maustaste 'Speichern unter ...'
Zoom (37KB)

1. Anlage eines Abonnenten "zmstest" im ZMI

Zoom (25KB)

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

Zoom (32KB)

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

Zoom (23KB)

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>&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>