getGroupsByUserId()

Django, Flask, Bottle, WSGI, CGI…
Antworten
Henning Carstens

Hallo,

ich möchte, dass ein Reviewer nur die Dokumente in seiner Review-Liste hat, die von Usern aus seine[rn] Gruppe[n] erzeugt wurden. Dazu habe ich in portal_review einfach eine tal:condition="python: context.isInMyGroup(o.Creator())" eingefügt.

Das Script isInMyGroup soll nun einfach prüfen, ob der übergebene User in einer der Gruppen des Users ist. Es scheitert allerdings schon daran, dass ich die Gruppen des Reviewers herausfinden will:

Code: Alles auswählen

creator = context.portal_membership.getAuthenticatedMember()
groups = context.portal_groups.getGroupsByUserId(creator)
Sobald die zweite Zeile im Script drin steht, erhalte ich unter Firefox folgende Meldung
Umleitungs Limit für diese URL überschritten. Die angeforderte Seite konnte nicht angezeigt werden. Das kann von geblockten Cookies herrühren
Im IE passiert gar nichts, d.h. er sagt eine Ewigkeit "Seite wird geöffnet" in der Statusleiste. Im Eventlog steht auch nichts.

Der Creator wird richtig übergeben. Es macht keinen Unterschied, ob ich noch getId() hinterhänge. Dasselbe Verhalten habe ich, wenn ich die Zeile im Script "my_worklist" (erzeugt in Review Liste) aufrufe.

Weiß irgendjemand weiter?
Danke!

Henning
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Henning Carstens hat geschrieben: ich möchte, dass ein Reviewer nur die Dokumente in seiner Review-Liste hat, die von Usern aus seine[rn] Gruppe[n] erzeugt wurden. Dazu habe ich in portal_review einfach eine tal:condition="python: context.isInMyGroup(o.Creator())" eingefügt.
[...]

Code: Alles auswählen

creator = context.portal_membership.getAuthenticatedMember()
groups = context.portal_groups.getGroupsByUserId(creator)
Sobald die zweite Zeile im Script drin steht, erhalte ich unter Firefox folgende Meldung
Umleitungs Limit für diese URL überschritten. Die angeforderte Seite konnte nicht angezeigt werden. Das kann von geblockten Cookies herrühren
Hi Henning!

Dein Code sollte funktionieren. Allerdings bin ich mir nicht sicher wie oder was du zurück gibst Kannst du mal den kompletten Code von "isInMyGroup" posten? Vielleicht gibst du nicht True, False, 1 oder 0 zurück.

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Henning Carstens

Code: Alles auswählen

creator = context.portal_membership.getAuthenticatedMember()
groups = context.portal_groups.getGroupsByUserId(creator)

return 1
Das return 1 hatte ich tatsächlich vergessen, mit habe ich allerdings das gleiche Problem. Wie gesagt, das gleiche Phänomen habe ich auch, wenn ich die Zeile in das Plonescript my_worklist einbaue. Es sollte also wirklich an der Funktion getGroupsByUserId liegen. Kommentiere ich die Zeile aus, erhalte ich keine Fehlermeldung (auch ohne return nicht).[/code]
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Henning Carstens hat geschrieben:

Code: Alles auswählen

creator = context.portal_membership.getAuthenticatedMember()
groups = context.portal_groups.getGroupsByUserId(creator)
return 1
Hi Henning!

Bitte poste das komplette Skript. Es geht nicht hervor wie du prüfst, welche Parameter du übergeben bekommst,...

An der Zeile groups = context.portal_groups.getGroupsByUserId(creator) kann es nicht liegen. Es muss noch etwas anderes sein.

Wie verhält sich der Browser, wenn du als erste Anweisung in deinem Skript einfach mal "return 1" hin stellst. So, dass das Skript nicht abgearbeitet wird. Wie verhält es sich, wenn du "return 0" verwendest? So kann man zumindest mal den Fehler eingrenzen.

lg
Gerold
:-)

Edit: Warum nennst du die Variable "creator"?
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Henning Carstens

Moin,

das ist das komplette Script. Als Parameter wird noch "user" übergeben, wird allerdings noch nicht benutzt. Das ganze wird aus dem portlet_review aufgerufen. Mir geht es zunächst nur darum, die Gruppen herauszufinden. Kommentiere ich die Zeile aus, erhalte ich keine Fehlermeldung und die Seite wird geladen.

Henning
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Henning Carstens hat geschrieben: das ist das komplette Script. Als Parameter wird noch "user" übergeben
Hi Henning!

Probier es doch mal hiermit:

Code: Alles auswählen

## Script (Python) "gruppentest"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=creator
##title=
##
creator = str(creator)
creator_groups = context.portal_groups.getGroupsByUserId(creator)
creator_groups = [ group.getId() for group in creator_groups ]

auth_member = context.portal_membership.getAuthenticatedMember()
auth_member_groups = context.portal_groups.getGroupsByUserId(str(auth_member))
auth_member_groups = [ group.getId() for group in auth_member_groups ]

if creator_groups and auth_member_groups:
    for auth_member_group in auth_member_groups:
        if auth_member_group in creator_groups:
            return 1

return 0
lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Henning Carstens

Hallo,

auf jeden Fall vielen Dank für das Script, so wollte ich das auch irgendwann machen. Aber ich erhalte die gleiche Fehlermeldung. Der Fehler dürfte nicht an den Scripten liegen, sondern an der Funktion getGroupsByUserId(). Sobald die in einem funktionierendem Script aufgerufen wird, erhalte ich die Fehlermeldung. Ich tippe inzwischen auf einen Bug in meiner Plone-Version (2.0.5 Windows Installer).

Gibt es vielleicht eine Möglichkeit doch eine Fehlermeldung zu bekommen? So wie es jetzt ist, steht ja nichts im eventlog. Außer einem Bug würde eigentlich nur eine "nicht kompatible" Gruppenkonfiguration den Fehler verursachen. Aber ich habe derzeit nur 2 Gruppen und kein User ist in mehreren Gruppen vertreten.

Die selbe Fehlermeldung kommt übrigens auch bei getGroupById(). Die Funktion liefert ein "portal_groupdata-ish object" (Zitat API-Dokumentation). Es scheint also eine generelles Problem beim auslesen der Gruppenzugehörigkeit zu geben.

Gruß
Henning
Henning Carstens

Ergänzung: Auch wenn ich Plone im Debug-Modus starte, erhalte ich keine Meldung in der Shell.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Henning Carstens hat geschrieben: Gibt es vielleicht eine Möglichkeit doch eine Fehlermeldung zu bekommen? So wie es jetzt ist, steht ja nichts im eventlog.
Hi Henning!

PloneErrorReporting in der Plone Konfiguration eingeschaltet?
Vielleicht hilft es auch, wenn du in der Plone Konfiguration beim Fehlerprotokoll die Liste der zu ignorierenden Fehlertypen leerst.

Unter Windows bekommst du nur über die Log-Datei nützliche Hinweise. Wenn ich unter Windows entwickle, dann lasse ich mir die Log-Datei gerne mal mit tail -F <Pfad zur Logdatei> in Echtzeit anzeigen. Zu finden unter http://unxutils.sourceforge.net/

Oder lege mal eine neue Plone Site an und probiere mein Skript mal direkt in einer neuen Site aus (über die Karteikarte Test). Damit du irgendein Ergebnis angezeigt bekommst, solltest du statt return 0 return 'xyz' schreiben.

lg
Gerold
:-)

PS: Meiner Meinung nach: meistens funktioniert irgendetwas in der Plone-Windowsinstallation nicht so richtig. Deshalb installiere ich unter Windows wie unter Linux zuerst ein reines Zope und dann erst die Produkte die ich brauche.
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Henning Carstens

Moin.

Ich habe gerade gemerkt, dass das Script keinen Fehler produziert, wenn ich als root (=mein bei der Installation angelegter "Manager") eingeloggt bin (also entweder im ZMI über test oder auf der Webseite als root einloggen). root selber ist ja auch in einem eigenen acl_user Ordner, der im ZMI nicht als Unterpunkt von Plone auftaucht. Ich werde gleich mal eine neue Group User Folder Version installieren, vielleicht hilft es ja...

Soweit Danke nochmal!
Henning
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Henning Carstens hat geschrieben:Ich werde gleich mal eine neue Group User Folder Version installieren
Hi Henning!

Probiere vorher mal aus ob es schon hilft, wenn du dem Skript die ProxyRolle "Manager" zuweist. Zu finden über die Karteikarte "Proxy".

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Henning Carstens

Mit der Proxy-Role klappt es tatsächlich. Komisch nur, dass man ohne keine Fehlermeldung "Fehlende Berechtigung" bekommt. Aber hauptsache es klappt jetzt.

Danke!

Henning
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Henning Carstens hat geschrieben:Mit der Proxy-Role klappt es tatsächlich. Komisch nur, dass man ohne keine Fehlermeldung "Fehlende Berechtigung" bekommt. Aber hauptsache es klappt jetzt.
Hi Henning!

Es freut mich, dass es funktioniert. 8)

Was die Fehlermeldungen angeht...
gerold hat geschrieben: PloneErrorReporting in der Plone Konfiguration eingeschaltet? Vielleicht hilft es auch, wenn du in der Plone Konfiguration beim Fehlerprotokoll die Liste der zu ignorierenden Fehlertypen leerst.

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Antworten