Plone 如果用户没有';如果我没有权限呈现视图(在configure.zcml上配置),我如何引发禁止而不是重定向到登录表单?
我有一个浏览器视图,带有一些实用程序。主要是一个“实用程序视图”,我使用旧式pt模板(位于Plone 如果用户没有';如果我没有权限呈现视图(在configure.zcml上配置),我如何引发禁止而不是重定向到登录表单?,plone,Plone,我有一个浏览器视图,带有一些实用程序。主要是一个“实用程序视图”,我使用旧式pt模板(位于皮肤文件夹中)遍历它。我的浏览器/configure.zcml: <browser:page for="*" name="my_view" class=".myview.MyView" allowed_interface=".myview.IMyView" permission="my.permission" /> 到
皮肤
文件夹中)遍历它。我的浏览器/configure.zcml
:
<browser:page
for="*"
name="my_view"
class=".myview.MyView"
allowed_interface=".myview.IMyView"
permission="my.permission"
/>
到目前为止,一切顺利。没有my.permission
的用户尝试进入/Plone/template.pt
将失败。但是Plone重定向到登录表单,我更愿意提出一个禁止的异常。比如:
<span tal:define="my_view here/@@myview | here/raiseForbidden">
</span>
…但是,当然,这不起作用,因为视图渲染没有引发错误。(我知道here/raiseForbidden不存在,通常使用的是here/raiseUnauthorized,但概念相同)
我的问题是:有可能吗?在某处配置我的权限,或在我的视图中配置某种方法(如
渲染或\uuuu调用
),当用户没有权限渲染它时,实际上您不需要这样做:
“tal:define=“我的视图在这里/@@myview>”
因为对于浏览器视图,有一个名为“view”的默认变量已经包含了您的类
要引发异常,应从zml指令中删除权限检查,并按如下方式修改类:
from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
from AccessControl import getSecurityManager
from AccessControl import Unauthorized
class YourBrowserView(BrowserView):
""" .. """
index = ViewPageTemplateFile("templates/yourtemplate.pt")
...
def __call__(self):
if not getSecurityManager().checkPermission(your.permission, self.context):
raise Unauthorized("You are not authorized! Go away!")
else: return index()
再见
Giacomo实际上你不需要这样做:
“tal:define=“我的视图在这里/@@myview>”
因为对于浏览器视图,有一个名为“view”的默认变量已经包含了您的类
要引发异常,应从zml指令中删除权限检查,并按如下方式修改类:
from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
from AccessControl import getSecurityManager
from AccessControl import Unauthorized
class YourBrowserView(BrowserView):
""" .. """
index = ViewPageTemplateFile("templates/yourtemplate.pt")
...
def __call__(self):
if not getSecurityManager().checkPermission(your.permission, self.context):
raise Unauthorized("You are not authorized! Go away!")
else: return index()
再见
GiacomoPlone重定向到登录表单,因为您提出了未经授权的请求。如果你想要不同的行为,你需要做一些不同的事情
在这种情况下,您可以直接将用户重定向到新页面,并根据情况定制错误消息 Plone重定向到登录表单,因为您提出了未经授权的请求。如果你想要不同的行为,你需要做一些不同的事情
在这种情况下,您可以直接将用户重定向到新页面,并根据情况定制错误消息 template.pt
位于skins
内部,而不是browser
。ViewPageTemplateFile
是否能够呈现skins
文件夹中的内容?问题不在提升中;这很有效。问题是重定向到登录表单。无论如何,在这种情况下,您应该使用遍历而不是ViewPageTemplateFile:“else:return self.context.portal_skins.custom['template.pt']()”,其中custom是模板所在的皮肤层名称。但我认为您应该考虑使用正确的方式使用代码>模板。ViewPageTemplateFile
是否能够呈现skins
文件夹中的内容?问题不在提升中;这很有效。问题是重定向到登录表单。无论如何,在这种情况下,您应该使用遍历而不是ViewPageTemplateFile:“else:return self.context.portal_skins.custom['template.pt']()”,其中custom是模板所在的皮肤层名称。但我认为您应该考虑使用正确的方式使用浏览器视图/模板,我希望<代码>禁止/代码>异常。我应该这样做@giacomos\uuuu调用\uuuuu
解决方案,但提出禁止
?或者基于raiseUnauthorized脚本创建您自己的raiseForbidden方法。在架构方面,把它放在视图\uuuuuu调用\uuuuu
对我来说有点好闻。我同意。你甚至两年前就回答过一个类似的问题唉,我老是忘了时间机器!警告,时间旅行可能导致副作用;包括但不限于健忘症。你说得对,我想要禁止的例外。我应该这样做@giacomos\uuuu调用\uuuuu
解决方案,但提出禁止
?或者基于raiseUnauthorized脚本创建您自己的raiseForbidden方法。在架构方面,把它放在视图\uuuuuu调用\uuuuu
对我来说有点好闻。我同意。你甚至两年前就回答过一个类似的问题唉,我老是忘了时间机器!警告,时间旅行可能导致副作用;包括但不限于健忘症。