更改经过身份验证的用户的Plone默认URL

时间:2016-05-10 20:24:21

标签: plone

我需要更改经过身份验证的用户的默认网址。例如,对根站点的请求将响应:

  1. [site-root] / wellcome01(默认网址,由plone配置界面设置),供匿名用户使用
  2. [site-root] / wellcome02(由某些资源设置)为经过身份验证的用户
  3. 那么实施此资源的最佳解决方案是什么?

3 个答案:

答案 0 :(得分:3)

你有几个选择

1

您可以使用以下代码在plone根目录中添加index_html Python脚本。

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

2

我个人不喜欢我的网站上的版本化代码,所以我建议你编写一个BrowserView,它处理de redirect

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

您可以仅针对SiteRoot(Products.CMFPlone.interfaces.siteroot.IPloneSiteRoot)注册此视图

答案 1 :(得分:3)

如果您愿意仅对登录事件作出反应,您可以调整以下内容,这将仅在首次登录时重定向(您可能需要IUserLoggedInEvent代替):

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

答案 2 :(得分:3)

或者,只使用一个包含两个元素的视图,一个仅在未登录时可见,另一个仅在登录时通过TAL条件显示。