Have you tried adding:

    auth.user.update(userlevel=newlevel)

Anthony

On Thursday, October 6, 2016 at 6:15:02 PM UTC-4, Michael Ellis wrote:
>
>
>  I have the following code as a json service for changing user privileges. 
>  This app doesn't need the fine-grained control of Web2py RBAC so I've 
> added an integer userlevel field to auth_user.  It mostly works as intended 
> except when a logged in user alters her own userlevel.  The change isn't 
> detected unless she logs out and then back in.  I understand this is 
> because the auth.user record is cached in the session.  What's the right 
> way to update a logged in user whose auth_user record may have changed?
>
> @service.json
> def set_user_group():
>     """
>     Changes a user's group (userlevel)
>     Args:
>         first_name,last_name, newgroup in request.args
>     Returns: error message if auth fails
>     Raises:  Nothing
>     """
>     err = None
>     if auth.is_logged_in() and auth.user.userlevel >=  2:
>         # Ok to change it
>         first, last, newgroup = tuple(request.args)[-3:]
>         tbl = db.auth_user
>         qry = ((tbl.first_name == first) & (tbl.last_name == last))
>         rows = db(qry).select()
>         assert len(rows) <= 1  ## should be impossible to have duplicate 
> names
>         if len(rows) == 0:
>             err = "User '{} {}' not found in database!".format(first, last)
>         else:
>             id = rows[0][tbl.id]
>             newlevel = dict(user=0, tech=1, admin=2)[newgroup.lower()]
>             db(tbl.id == id).update(userlevel=newlevel)
>     else:
>         err = "Changing user groups requires log-in with admin privileges"
>     return dict(msg=err)               
>
>
>

-- 
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to