1. Anlage eines Abonnenten "zmstest" im ZMI
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
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.
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>
.....
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>