From ed98f3ff9afa52568deac5ffc561ec37b613fe36 Mon Sep 17 00:00:00 2001 From: Victoria Earl Date: Sat, 11 Jan 2025 22:17:29 -0500 Subject: [PATCH] Update guest admin permissions Guest admins need to also see guest checklist groups that are attendee badges, so now we allow anyone with guest_admin access to see everyone in a "guest checklist" group as long as they aren't a band or a MIVS group (and if they don't have the RockStar ribbon), i.e., guest admins can see every guest-related thing besides MIVS and Band groups. --- uber/models/__init__.py | 41 +++++++++++++++++++---------------------- 1 file changed, 19 insertions(+), 22 deletions(-) diff --git a/uber/models/__init__.py b/uber/models/__init__.py index 94388f48a..5874cf288 100644 --- a/uber/models/__init__.py +++ b/uber/models/__init__.py @@ -884,28 +884,25 @@ def access_query_matrix(self): admin = self.current_admin_account() return_dict = {'created': self.query(Attendee).filter( or_(Attendee.creator == admin.attendee, Attendee.id == admin.attendee.id))} - # Guest groups - for group_type, badge_and_ribbon_filter in [(c.BAND, - and_(Attendee.badge_type == c.GUEST_BADGE, - Attendee.ribbon.contains(c.BAND))), - (c.GUEST, - and_(Attendee.badge_type == c.GUEST_BADGE, - ~Attendee.ribbon.contains(c.BAND)))]: - return_dict[c.GROUP_TYPES[group_type].lower() + '_admin'] = ( - self.query(Attendee).join(Group, Attendee.group_id == Group.id) - .join(GuestGroup, Group.id == GuestGroup.group_id).filter( - or_( - or_( - badge_and_ribbon_filter, - and_( - Group.id == Attendee.group_id, - GuestGroup.group_id == Group.id, - GuestGroup.group_type == group_type, - ) - ) - ) - ) - ) + + return_dict['band_admin'] = self.query(Attendee).outerjoin(Group, Attendee.group_id == Group.id).join( + GuestGroup, Group.id == GuestGroup.group_id).filter( + or_(Attendee.ribbon.contains(c.BAND), + and_( + Attendee.group_id != None, + Group.id == Attendee.group_id, + GuestGroup.group_id == Group.id, + GuestGroup.group_type == c.BAND))) + + return_dict['guest_admin'] = self.query(Attendee).outerjoin(Group, Attendee.group_id == Group.id).join( + GuestGroup, Group.id == GuestGroup.group_id).filter( + ~Attendee.ribbon.contains(c.BAND), + or_(Attendee.badge_type == c.GUEST_BADGE, + and_( + Attendee.group_id != None, + Group.id == Attendee.group_id, + GuestGroup.group_id == Group.id, + ~GuestGroup.group_type.in_([c.BAND, c.MIVS])))) return_dict['panels_admin'] = self.query(Attendee).outerjoin(PanelApplicant).filter( or_(Attendee.ribbon.contains(c.PANELIST_RIBBON),