2014-02-21 4 views
0

Я хочу иметь две 403 Запрещенные страницы. Если пользователь несанкционирован, покажите страницу с формой входа. Если пользователь авторизован, покажите страницу, в которой говорится, что им не разрешено просматривать страницу.Изменение запрещенного вида в зависимости от авторизации

Похоже, effective_principals от add_view от Pyramid - это путь. Тем не менее, я не могу понять, как правильно использовать это. Вот что я делаю:

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'])

ответ

2

Внутри forbidden view вы можете поставить условие так:

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

Так как вошли и не зарегистрированные пользователи перенаправляются по пирамиде на эту страницу, а затем пирамида перенаправляет вошли один на другую страницу для зарегистрированных пользователей, которые, кстати, могут быть защищены, например, таким образом:

@view_config(route_name='forbidden_logged_in', permission='user') 
Смежные вопросы