Abfrage der Gruppenmitgliedschaft in einer Zeile?

Django, Flask, Bottle, WSGI, CGI…
Antworten
imbabura
User
Beiträge: 9
Registriert: Donnerstag 27. September 2007, 11:52

Hallo,
ich bin noch ein echter Anfänger.
kann man aus templates, portlets, etc. in einer Zeile über python
abfragen, ob der user Mitglied in Gruppe X ist? Ich meine so, wie
man sonst abfragt, ob der user Reviewer ist?

tal:condition="python:checkPermission('Review portal content', here)"

Geht sowas auch so einfach für die Abfrage der Mitglliedschaft in Gruppe X?
Ich habs versucht, aber bisher ohne Erfolg?
Oder muss man sich für sowas ein kurzes python script schreiben,
dass dann TRUE als state zurückliefert, wenn der user in Gruppe X ist.

Eigentlich doch ein sehr alltägliches Problem / eine sehr gängige
Anforderung, denke ich. Trotzdem hab ichs bisher nicht geschafft.

Vielen Dank allen, die mir helfen,
Ciao,

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

Hallo!

Vielleicht kannst du hier etwas nützliches für dich raus ziehen:

- http://www.python-forum.de/topic-8064.html
- http://www.python-forum.de/topic-3786.html

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
imbabura
User
Beiträge: 9
Registriert: Donnerstag 27. September 2007, 11:52

Ich hab mir Dein Script angeguckt, was prüft, welche Mitglieder
noch in einer Gruppe sind und ein eigenes geschrieben, was nur
sagen soll, ob der aktuelle User Mitglied in Gruppe1 ist.

Das Script UserInGruppe1 sieht dann so aus:

Code: Alles auswählen

# überprüft, ob der Benutzer in der Gruppe1 ist

auth_member = context.portal_membership.getAuthenticatedMember()
auth_member_groups = context.portal_groups.getGroupsByUserId(auth_member)


if 'Gruppe1' in auth_member_groups:
   return 1
else:
   return 0


Die Abfrage der Gruppenmitgliedschaft will ich in einem Portlet machen,
die Abfrage lautet dort also:

<tal:condition condition="python:UserInGruppe1">

es wird aber immer 0 geliefert, das Portlet verschwindet also ganz :-(
Fehlermeldungen gibt es keine.

Auch in einer Zeile hab ich es versucht im Portlet:

<tal:condition condition="python:'Gruppe1' in context.portal_groups.getGroupsByUserId(context.portal_membership.getAuthenticatedMember())">

Ergebnis ist dasselbe: keine Fehlermeldung, aber Portlet verschwindet,
weil für python die Bedingung nicht erfüllt ist, die eigentlich erfüllt ist.

Zur Info: Die Seite läuft mit Plone 2.5.2 und den Anfang Deines Scripts mit
den ganzen ##bind context=context etc... hab ich vorsichtshalber beibehalten.

Wenn Du oder jemand anders einen Tipp hat, warums nicht
klappt, bzw. warum immer 0 zurückgegeben wird und was man
ändern müsste, wäre ich sehr dankbar.

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

imbabura hat geschrieben:<tal:condition condition="python:UserInGruppe1">
Hallo Imbabura!

Ich habe jetzt keine Zeit um das nachzuprüfen:

Code: Alles auswählen

<tal:block tal:condition="context/UserInGruppe1">
mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
imbabura
User
Beiträge: 9
Registriert: Donnerstag 27. September 2007, 11:52

funktioniert leider auch nicht (Portlet verschwindet, weil scheinbar in jedem Fall = zurückgeliefert wird, warum auch immer.)

Für alle Tipps zur Lösung des Falls bin ich sehr dankbar.

imbabura
imbabura
User
Beiträge: 9
Registriert: Donnerstag 27. September 2007, 11:52

Ich hab das Problem gelöst und das Script funktioniert und wird im portlet
ganz einfach aufgerufen über condition="python:context.group1member()"

Da es irgendwie nicht so schnell geklappt hat, den Namen der Gruppe in der Liste der Gruppen des Users zu finden, hab ichs umgekehrt gemacht und suche in der Liste der Gruppenmitglieder nach dem Namen des Users.
In meinem Fall Jacke wie Hose, da die entsprechende Gruppe nicht sehr viele Mitglieder hat und nie haben wird.

Das Script group1member sieht dann so aus:

Code: Alles auswählen

# überprüft, ob User zur group1 gehört

from Products.CMFCore.utils import getToolByName

group_id='group1'
member = context.portal_membership.getAuthenticatedMember() 

tool = getToolByName(context, 'portal_groups')
group = tool.getGroupById(group_id)

group1MemberList = group.getGroupMemberIds()

if str(member) in group1MemberList:
  return 1
else:
  return 0

Funktioniert endlich alles so wie's soll! :D
Antworten