I am writing an application where login is required for almost the
entire site (Intranet application inside a company). There is an
equipment access dictionary structure I called user_access I build
from the database at login and cache in the session. I added code to
the default controller user function to set the dictionary to None on
logout as follows:

In default.py

def user():
    if request.args(0)=='logout':
        session.user_access = None
    return dict(form=auth())

I need the user_access dictionary as the basis for a menu structure
that allows access to equipment through menu items and doesn't offer
items the user is not supposed to use.

I put this code into menu.py just after the index page definition and
the login/logoff and user_access dictionary states seem to track well
for what I need.

response.menu = [
    (T('Index'), False, URL('default','index'), [])
    ]

if auth.user:
    if not session.user_access:
        session.user_access = get_user_access()

    response.menu += generate_user_dependent_menu()

.... rest of menu code.

Is this the right way to accomplish this? What if there are AJAX or
RPC service requests, I think model code still gets run fully and
these requests are required to be authenticated as well. I could also
move this to the last model file and then just put if auth.user: in
front of the per user defined portion of the menu.

Thanks
Ron

Reply via email to