|
Shawn Harrison
harrison at tbc.net
Wed Feb 9 16:32:15 EST 2005
Jef Dodson wrote [02/09/05 2:56 PM]:
> Great, thanks. So, I was able to get cookies working but I would like to experiment with using
> Session objects. Does anyone have some simple example code showing how to do basic stuff with a
> Session object like: Get the sessionid from a request to identify a particular user and if no
> session is found, create a session object and send it back to the browser. The documentation
> seems a little sparse in this area and I'm a little confused about how exactly session objects
> work in general. Thanks again!
Yes, the documentation isn't as helpful as it could be. Maybe we should
submit some patches.
First, I set the session after login. I put in a list of the groups that
the user is a member of, as well as the user name, so that I can do
group-based access control without querying the DB all the time:
# This code is after login and the user has been verified.
# The details are specific to my environment -- in particular, the
# 'db' object. But you can get the idea. --SAH
from mod_python import Session
session = Session.Session(req)
# Set the username and groups that this user belongs to
grouplist = []
# The following line would depend on your DB access method.
# I have my own Database() class which provides select()
# You'll probably use "cursor.execute(...)" and "cursor.fetchall()".
groups = db.select('groups_memberships_users',
'groupname',
"username = '%s'" % user.name)
for i in range(len(groups)):
grouplist.append(groups[i].groupname)
session['groups'] = "|".join(grouplist)
session['user'] = user.name
# save the session for next time.
session.save()
Then, I have a function that my authen_handler uses for restricted areas
of the site:
from mod_python import apache, Session
def require_group(req, group):
# Check to see if the user has access to this group's resources.
# returns an apache error status
# see if the user has a session
sess = Session.Session(req)
sess.load()
if sess.is_new():
util.redirect(req, '/login?refpage=%s' % req.uri)
return apache.OK
else:
# check out the user's login and group membership
if sess.has_key('groups'): groups = sess['groups']
else: groups=""
groups = groups.split("|")
if group in groups:
return apache.OK
else:
return apache.HTTP_FORBIDDEN
--
________________
harrison at tbc.net
|