2016-05-10 8 views
2

Ich muss die Standard-URL für authentifizierte Benutzer ändern. Zum Beispiel kann ein Antrag auf Stammwebsite wird Antwort:Plone-Standard-URL für authentifizierte Benutzer ändern

  1. [site-root]/wellcome01 (Standard-URL, Set von plone Konfigurationsschnittstelle), für einen anonymen Benutzer
  2. [site-root]/wellcome02 (set von einigen Ressource) für einen authentifizierten Benutzer

Also, was ist die beste Lösung, um diese Ressource zu implementieren?

Antwort

3

Sie haben mehrere Möglichkeiten

1.

Sie können mit dem folgenden Code in Ihrer Plone-Wurzel, ein index_html Python Script hinzufügen.

if context.portal_membership.isAnonymousUser(): 
    return context.REQUEST.RESPONSE.redirect('welcome01') 
else: 
    return context.REQUEST.RESPONSE.redirect('welcome02') 

2.

ich persönlich nicht mag keinen Code auf meiner Website versioniert, so dass ich rate Ihnen, einen BrowserView zu schreiben, die de

from Products.Five.browser import BrowserView 
from plone import api 


class RootRedirector(BrowserView): 

    def __call__(self): 

     if api.user.is_anonymous() 
      return self.request.RESPONSE.redirect('welcome01') 
     else: 
      return self.request.RESPONSE.redirect('welcome02') 

umleiten Griffe können Sie diese regsiter Nur für SiteRoot anzeigen (Products.CMFPlone.interfaces.siteroot.IPloneSiteRoot)

+0

aus Zeitmangel hatten wir die Lösung 1 übrigens schon umgesetzt. Danke für die Beispiele. – gwarah

3

Wenn Sie nur auf Anmeldeereignisse reagieren möchten, können Sie Folgendes anpassen: o n die allererste nur anmelden (und Sie wollen wahrscheinlich IUserLoggedInEvent statt):

configure.zcml:

<subscriber for="Products.PlonePAS.events.IUserInitialLoginInEvent" 
      handler=".hellonewbie.showIntroPage" /> 

hellonewbie.py:

# -*- coding: utf-8 -*- 
from zope.app.component.hooks import getSite 

USER_ROLE  = 'Member' 
INTRO_PAGE_ID = 'new-user-info' 

def showIntroPage(event): 
    """Login event handler: first login. 

    For proper users (i.e. Member role) that have 
    never logged in before, redirect them to a page 
    that tells them about the system. 
    """ 

    user = event.object 

    if user.has_role(USER_ROLE): 
     # yup, redirect the guy, he/she's new. 

     portal = getSite() 
     request = getattr(portal, "REQUEST", None) 
     if request: 
      infopage = portal.restrictedTraverse(INTRO_PAGE_ID, None) 
      if infopage: 
       request.response.redirect(infopage.absolute_url()) 
+0

Wir wählen diese Lösung nicht, aber sie hilft bei anderen Code-Fällen. Danke für den Code. – gwarah

3

Oder benutzen Sie einfach eine Ansicht mit zwei Elemente, eines nur sichtbar, wenn nicht eingeloggt, das andere nur, wenn eingeloggt, über TAL-Bedingungen.