我想要两个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'])
答案 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')