2016-05-10 2 views
2

Je dois modifier l'URL par défaut pour les utilisateurs authentifiés. Par exemple, une demande de site root réponse:Modifier l'URL par défaut de Plone pour les utilisateurs authentifiés

  1. [racine du site]/wellcome01 (URL par défaut, définie par l'interface de configuration plone), pour un utilisateur anonyme
  2. [racine du site]/wellcome02 (fixé par une ressource) pour un utilisateur authentifié

Alors, quelle est la meilleure solution pour mettre en œuvre cette ressource?

Répondre

3

Vous avez obtenu plusieurs options

1.

Vous pouvez ajouter un script Python index_html dans la racine de votre plone, avec le code suivant.

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

2.

Personnellement, je ne codent aime pas versionné sur mon site, donc je vous conseille d'écrire un BrowserView, qui traite de redirigent

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') 

Vous pouvez regsiter cette affichage uniquement pour SiteRoot (Products.CMFPlone.interfaces.siteroot.IPloneSiteRoot)

+0

par manque de temps, nous avions suivi la solution 1, d'ailleurs, déjà implémentée. Merci pour les exemples. – gwarah

3

Si vous souhaitez simplement réagir aux événements de connexion, vous pouvez adapter les éléments suivants, qui redirigera o n la première Connexion uniquement (et que vous voulez probablement IUserLoggedInEvent à la place):

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

Nous ne choisissons pas cette solution mais son aide sur d'autres cas de code. Merci pour le code. – gwarah

3

Ou, il suffit d'utiliser un point de vue avec deux éléments, un seul visible si pas connecté, l'autre seulement, si connecté, via TAL-conditions.