首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果用户没有渲染视图的权限(在configure.zcml上配置),如何引发禁止而不是重定向到login_form?

如果用户没有渲染视图的权限(在configure.zcml上配置),如何引发禁止而不是重定向到login_form?
EN

Stack Overflow用户
提问于 2011-08-05 05:05:34
回答 2查看 531关注 0票数 1

我有一个浏览器视图,带有一些实用程序。主要是一个“实用工具视图”,我使用旧式的pt模板(在skins文件夹中)遍历它。我的browser/configure.zcml

代码语言:javascript
复制
  <browser:page
      for="*"
      name="my_view"
      class=".myview.MyView"
      allowed_interface=".myview.IMyView"
      permission="my.permission"
      />

正如您所看到的,它有一个自定义权限:这是必需的,因为匿名用户无法呈现此视图,而此权限实际上是特定于我的门户中的特定情况的。

我想:我要尝试在我的template.pt中呈现视图:因为我已经在browser/configure.zcml中设置了权限,当尝试呈现Plone时,它本身将为我处理这个问题。所以我在我的模板中这样做了

代码语言:javascript
复制
    <span tal:define="my_view here/@@myview">
    </span>

到现在为止还好。没有my.permission的用户尝试进入/Plone/template.pt将会失败。但是Plone会重定向到登录表单,而我更喜欢抛出一个禁止的异常。类似于:

代码语言:javascript
复制
    <span tal:define="my_view here/@@myview | here/raiseForbidden">
    </span>

当然,...but不起作用,因为视图呈现没有抛出错误。(我知道here/raiseForbidden不存在,通常使用的是here/raiseUnauthorized,但概念是一样的)

我的问题是:有可能做到这一点吗?在某个地方配置我的权限,或者在我的视图中配置一些方法(如render__call__),当用户没有权限呈现它时,an exception like Forbidden is raised

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-05 16:12:12

Plone重定向到登录表单,因为您引发了未授权的。如果你想要不同的行为,你需要做一些不同的事情。

在这种情况下,您可以直接将用户重定向到一个新页面,其中包含针对该情况量身定做的错误消息。

票数 2
EN

Stack Overflow用户

发布于 2011-08-05 06:47:32

实际上你不需要这样做:

"tal:define="my_view此处/@@myview>“

因为对于浏览器视图,有一个名为"view“的默认变量,它已经包含了您的类。

对于引发异常,您应该从zml指令中删除权限检查,并修改您的类,如下所示:

代码语言:javascript
复制
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()

再见贾科莫

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6948507

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档