Search code examples
pythonpyramid

Include authenticated user in dictionary for all views


I am working through the Pyramid authorization tutorial and I have noticed the pattern where

logged_in = request.authenticated_userid

is added to each view dictionary. Can it be avoided? I.e. is there a configuration which automatically ads user id to each view. Or is there a way to create a base, abstract view with the user id and inherit from it?

Part of the code from the tutorial:

@view_config(context='.models.Page', renderer='templates/view.pt', permission='view')
def view_page(context, request):
    # not relevant code
    return dict(page = context, content = content, edit_url = edit_url,
                logged_in = request.authenticated_userid)

@view_config(name='add_page', context='.models.Wiki', renderer='templates/edit.pt', 
             permission='edit')
def add_page(context, request):
     # not relevant code
     return dict(page=page, save_url=save_url,
                 logged_in=request.authenticated_userid)

Solution

  • It's been awhile since I last looked, but I think logged_in in the samples is just an example to use to conditionally check if there is a logged on user or not. You could probably just as easily refer to request.authenticated_userid within any of your views or templates, too, and get the same behavior and not have to explicitly add a status to the response dict. The request object should be available to be referenced in your view templates, too.

    Alternatively, I've used their cookbook to add a user object to the request to make a friendly request.user object that I can use to both check for logged in status where needed, plus get at my other user object details if I need to as well.