Setting a default reference value as that of a specific group the logging in user is a member of

51 views
Skip to first unread message

mostwanted

unread,
Feb 25, 2020, 2:28:31 AM2/25/20
to web...@googlegroups.com
I have 2 tables about a hotel, one table registers the hotel itself & the other is about meals that are offered at the hotel but the idea is that only group members of each hotel have to & can only register meals for their hotels. So to avoid mistakes & prevent malicious intentions I was wondering if its possible to have the referencing field in the meals table pre-selected appropriately for the logged in user with their correct hotel name as per the group they belong to. I hope I make sense:

MODEL CODE
def get_group():
    groups = auth.user_groups
    if not groups:
        return None
    group_ids = [id for id in groups if not groups[id].startswith('user_')]
    return group_ids[0] if group_ids else None

db.define_table('hotel_profile',
               
Field('hotel_name'),
               
Field('logo', 'upload'),
               
Field('tel1'),
               
Field('email_address'),
               
Field('directions', 'text', requires=IS_LENGTH(500)),
               
Field('google_directions'),
               
Field('posted_by', 'reference auth_user', default=auth.user_id, readable=False, writable=False),
               
Field('groups', 'reference auth_group', default=get_group(), readable=False, writable=False),
                format
='%(hotel_name)s'
               
)


db
.define_table('meals',
               
Field('hotel', 'reference hotel_profile'),
               
Field('supper_price'),
               
Field('supper_details', 'text', requires=IS_LENGTH(200)),
               
Field('lunch_price'),
               
Field('lunch_details', 'text', requires=IS_LENGTH(200)),
               
Field('breakfast_price'),
               
Field('breakfast_details', 'text', requires=IS_LENGTH(200)),
               
Field('posted_by', 'reference auth_user', default=auth.user_id, readable=False, writable=False),
               
Field('groups', 'reference auth_group', default=get_group(), readable=False, writable=False)
               
)

Regards;

Mostwanted

AGRogers

unread,
Feb 25, 2020, 3:06:06 AM2/25/20
to web...@googlegroups.com
I am interested in the best practice way to do this as well. 

On Tue, 25 Feb 2020, 13:58 mostwanted, <godir...@gmail.com> wrote:
I have 2 tables about a hotel, one table registers the hotel itself & the other is about meals that are offered at the hotel but the idea is that only group members of each hotel have to & can only register meals for their hotels. So to avoid mistakes & prevent malicious intentions I was wondering if its possible to have the referencing field in the meals table pre-selected appropriately for the logged in user with their correct hotel name as per the group they belong to. I hope I make sense:

MODEL CODE
db.define_table('hotel_profile',
               
Field('hotel_name'),
               
Field('logo', 'upload'),
               
Field('tel1'),
               
Field('email_address'),
               
Field('directions', 'text', requires=IS_LENGTH(500)),
               
Field('google_directions'),
               
Field('posted_by', 'reference auth_user', default=auth.user_id, readable=False, writable=False),
               
Field('groups', 'reference auth_group', default=get_group(), readable=False, writable=False),
                format
='%(hotel_name)s'
               
)


db
.define_table('meals',
               
Field('hotel', 'reference hotel_profile'),
               
Field('supper_price'),
               
Field('supper_details', 'text', requires=IS_LENGTH(200)),
               
Field('lunch_price'),
               
Field('lunch_details', 'text', requires=IS_LENGTH(200)),
               
Field('breakfast_price'),
               
Field('breakfast_details', 'text', requires=IS_LENGTH(200)),
               
Field('posted_by', 'reference auth_user', default=auth.user_id, readable=False, writable=False),
               
Field('groups', 'reference auth_group', default=get_group(), readable=False, writable=False)
               
)

Regards;

Mostwanted

--
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+un...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/web2py/be138b98-8d67-4a8d-bb77-b4410434f882%40googlegroups.com.

villas

unread,
Feb 25, 2020, 2:06:55 PM2/25/20
to web2py-users
Set the default hotel value in the SQLFORM field.

You could also 'force' the hotel you want by using SQLFORM onvalidation

mostwanted

unread,
Feb 26, 2020, 1:59:31 AM2/26/20
to web2py-users
How do I set it as a default if the form is not open by a link redirection? The form is opened directly by the main-menu.
If it were opened through the link then it'd be easy to set the hotel as a default coz all i'd do would be:
hotel=db(db.hotel_profile(request.args(0, cast=int))
db
.meals.hotel.default=hotel.id

Please pardon my limited skill but your assistance would take me to the next phase of this project.

Regards

Annet

unread,
Feb 26, 2020, 2:43:02 AM2/26/20
to web2py-users
I don't understand the use of field 'groups' and function 'get_groups()

I think you should use web2py's built in auth_ functionality: drop field
'groups' in both tables, link users and groups (each hotel its own group)
in the auth_membership table, and use this table to create a list of options
for the drop-down.

I hope this points you in the right direction to solve your problem


Kind regards,

Annet

AGRogers

unread,
Feb 26, 2020, 3:36:22 AM2/26/20
to web...@googlegroups.com
Thanks for the extra info. In my scenario I have schools, teachers, subjects, classes and students. At the Classes level there will be hundreds eventually (new ones each term). Your school limits what subjects you can see. The teacher limits what classes she can see etc. 

If I understood you correctly you are suggesting to use the auth functionality built into web2py. Do you think that is still appropriate when there are potentially hundreds of groups?

And second, I think I read that py4web uses a different approach with tags(?) Is that correct? 

Thanks 

--
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+un...@googlegroups.com.

villas

unread,
Feb 26, 2020, 9:24:20 AM2/26/20
to web2py-users
Naturally you can still use auth to identify the user. 
The auth groups is really just to identify the type of user,  e.g. teachers, students, admins. This is useful for allowing access to certain functionality.
You must still design your DB and create links between your tables using relational keys/ids.  This can get rather complex.  For example, a teacher might work at more than one school.  Start off by drawing a diagram to connect all your tables.



On Wednesday, 26 February 2020 08:36:22 UTC, AGRogers wrote:
Thanks for the extra info. In my scenario I have schools, teachers, subjects, classes and students. At the Classes level there will be hundreds eventually (new ones each term). Your school limits what subjects you can see. The teacher limits what classes she can see etc. 

If I understood you correctly you are suggesting to use the auth functionality built into web2py. Do you think that is still appropriate when there are potentially hundreds of groups?

And second, I think I read that py4web uses a different approach with tags(?) Is that correct? 

Thanks 

On Wed, 26 Feb 2020, 15:43 'Annet' via web2py-users, <web...@googlegroups.com> wrote:
I don't understand the use of field 'groups' and function 'get_groups()

I think you should use web2py's built in auth_ functionality: drop field
'groups' in both tables, link users and groups (each hotel its own group)
in the auth_membership table, and use this table to create a list of options
for the drop-down.

I hope this points you in the right direction to solve your problem


Kind regards,

Annet

--
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 web...@googlegroups.com.
Reply all
Reply to author
Forward
0 new messages