根据授权更改禁止的视图

时间:2014-02-21 20:00:58

标签: python pyramid

我想要两个403 Forbidden页面。如果用户未经授权,请显示包含登录表单的页面。如果用户已获得授权,请显示一个页面,告知他们不允许他们查看该页面。

好像金字塔add_view effective_principals似乎是解决这个问题的方法。但是,我似乎无法弄清楚利用它的正确方法。这就是我正在做的事情:

from pyramid.security import Authenticated


@forbidden_view_config(containment=MyClass, renderer='login.pt')
def not_found(context, request):
    return dict()


@forbidden_view_config(containment=MyClass, effective_principals=Authenticated)
def not_found(context, request):
    return Response('Not allowed.')

但是,我收到了一个错误:

  

PredicateMismatch:视图not_found的谓词不匹配(effective_principals = ['system.Authenticated'])

1 个答案:

答案 0 :(得分:2)

forbidden view内,您可以设置如下条件:

if authenticated_userid(request):
    return HTTPFound(location=request.route_url('forbidden_logged_in'))

因此,Pyramid将已记录和未记录的用户重定向到此页面,然后Pyramid将已记录的用户重定向到已登录用户的另一个页面,顺便说一句,这样可以保护,例如:

@view_config(route_name='forbidden_logged_in', permission='user')