will look asap. Thank you.

On Sep 22, 11:49 am, Richard Vézina <ml.richard.vez...@gmail.com>
wrote:
> Here an improved version of the controller that takes care if user has
> membership to differents groups. The "try" is to check if the user has a set
> of group allowed... It could be better in the future to make a function
> "has_group_allowed".
>
> You need to add this model :
>
> db.define_table('auth_group_allowed',
>     Field('id','id'),
>     Field('user_id','db.auth_user'),
>     Field('group_id','db.auth_group'),
>     Field('active_gr','boolean'),
>     migrate=False,
>     sequence_name='auth_group_allowed_id_seq')
>
> db.auth_group_allowed.user_id.requires=IS_IN_DB(db,'auth_user.id','%(first_name)s
> %(last_name)s (%(id)s)')
> db.auth_group_allowed.group_id.requires=IS_IN_DB(db,'auth_group.id','%(role)s
> (%(id)s)')
>
> Then configure your RBAC correctly... Add to user you want the permission to
> change his role by adding the set of allowed roles he is allowed. Then
> specify wich role he is already in or the function chmembership will fix it
> automatically anyway at first execution.
>
> Here the function :
>
> @auth.requires_login()
> def chmembership():
>     try:
>         if db(db.auth_group_allowed.user_id==auth.user.id)\
>
>  .select(db.auth_group_allowed.user_id,distinct=True).first().user_id==
> auth.user.id:
>             if auth.has_membership(auth.id_group('technician')) or
> auth.has_membership(auth.id_group('coordinator')) or
> auth.has_membership(auth.id_group('admin')):
>                 active_gr=db(db.auth_group_allowed.user_id==auth.user.id\
>                                 and
> db.auth_group_allowed.active_gr=='TRUE')\
>
>  .select(db.auth_group_allowed.group_id).first().group_id
>                 membershipID=db(db.auth_membership.group_id==active_gr\
>                                 and db.auth_membership.user_id==auth.user.id
> )\
>                                 .select(db.auth_membership.id).first().id
>                 rows=db(db.auth_group_allowed.user_id==auth.user.id
> ).select(db.auth_group_allowed.group_id)
>                 groupSet={}
>                 for row in rows:
>                     authgrouprole=db(db.auth_group.id
> ==row.group_id).select(db.auth_group.role).first().role
>                     groupSet[row.group_id]=authgrouprole
>                 db.auth_membership.group_id.requires=IS_IN_SET(groupSet)
>                 form = crud.update(db.auth_membership,membershipID)
>                 new_gr=db(db.auth_membership.id
> ==membershipID).select(db.auth_membership.group_id).first().group_id
>                 db(db.auth_group_allowed.user_id==auth.user.id\
>                                 and
> db.auth_group_allowed.active_gr=='TRUE').update(active_gr='FALSE')
>                 db(db.auth_group_allowed.user_id==auth.user.id\
>                                 and
> db.auth_group_allowed.group_id==new_gr).update(active_gr='TRUE')
>                 return dict(form=form, active_gr=active_gr,
> membershipID=membershipID, groupSet=groupSet)
>     except AttributeError:
>         redirect(URL(request.application,'default','index'))
>         session.flash = T('invalid request')
>
> It is not correctly tested so there is no garranty ;-)
>
> I appreciate feed back!
>
> Regards
>
> Richard
>
> On Tue, Sep 21, 2010 at 7:09 PM, Richard Vézina <ml.richard.vez...@gmail.com
>
> > wrote:
> > Hello Massimo,
>
> > Here what I found as a temporarily solution :
>
> > I made a auth_group_allowed that is a m2m relation between auth_user and
> > auth_group. So, we can attribute each user a set of groups in which he is
> > allowed to change with.
>
> > Then this controller can let the user pick the group he want :
>
> > @auth.requires_login()
> > def chmembership():
> >     j=db(db.auth_membership.user_id==auth.user.id).select(
> > db.auth_membership.id).first().id
> >     rows=db(db.auth_group_allowed.user_id==auth.user.id
> > ).select(db.auth_group_allowed.group_id)
> >     groupSet={}
> >     for row in rows:
> >         authgrouprole=db(db.auth_group.id
> > ==row.group_id).select(db.auth_group.role).first().role
> >         groupSet[row.group_id]=authgrouprole
> >     db.auth_membership.group_id.requires=IS_IN_SET(groupSet)
> >     form = crud.update(db.auth_membership,j)
>
> >     return dict(form=form, j=j, groupSet=groupSet)
>
> > It's just the beginning since I can't handle the case were a user is
> > involve in more then one group for now.
>
> > Please comment?
>
> > Regards
>
> > Richard
>
> > On Fri, Sep 17, 2010 at 9:56 AM, mdipierro <mdipie...@cs.depaul.edu>wrote:
>
> >> no and it is very much needed. Any takers?
>
> >> On Sep 17, 8:50 am, Richard Vézina <ml.richard.vez...@gmail.com>
> >> wrote:
> >> > Hello,
>
> >> > I need to let some of my user changing of membership into a plage of
> >> > existing members number. Is there mechanism already existing in web2py
> >> or do
> >> > I have to program it from scratch?
>
> >> > Thanks
>
> >> > Richard
>
>

Reply via email to