为经过身份验证的用户更改 Plone 默认值 URL
Change Plone default URL for authenticated users
我需要更改经过身份验证的用户的默认设置 URL。例如,对根站点的请求将响应:
- [site-root]/wellcome01(默认url,由plone配置界面设置),匿名用户
- [site-root]/wellcome02(由某些 资源 设置)用于经过身份验证的用户
那么实施此 资源 的最佳解决方案是什么?
你有几个选择
1.
您可以在您的 plone root 中添加一个 index_html
Python 脚本,代码如下。
if context.portal_membership.isAnonymousUser():
return context.REQUEST.RESPONSE.redirect('welcome01')
else:
return context.REQUEST.RESPONSE.redirect('welcome02')
2.
我个人不喜欢我网站上没有版本控制的代码,所以我建议您编写一个 BrowserView,它处理去重定向
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) 注册此视图
如果您只想对登录事件做出反应,您可以调整以下内容,这将仅在首次登录时重定向(您可能需要 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())
或者,仅使用一个包含两个元素的视图,一个仅在未登录时可见,另一个仅在登录后通过 TAL 条件显示。
我需要更改经过身份验证的用户的默认设置 URL。例如,对根站点的请求将响应:
- [site-root]/wellcome01(默认url,由plone配置界面设置),匿名用户
- [site-root]/wellcome02(由某些 资源 设置)用于经过身份验证的用户
那么实施此 资源 的最佳解决方案是什么?
你有几个选择
1.
您可以在您的 plone root 中添加一个 index_html
Python 脚本,代码如下。
if context.portal_membership.isAnonymousUser():
return context.REQUEST.RESPONSE.redirect('welcome01')
else:
return context.REQUEST.RESPONSE.redirect('welcome02')
2.
我个人不喜欢我网站上没有版本控制的代码,所以我建议您编写一个 BrowserView,它处理去重定向
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) 注册此视图
如果您只想对登录事件做出反应,您可以调整以下内容,这将仅在首次登录时重定向(您可能需要 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())
或者,仅使用一个包含两个元素的视图,一个仅在未登录时可见,另一个仅在登录后通过 TAL 条件显示。