Skip to content

Commit

Permalink
Update guest admin permissions
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
kitsuta committed Jan 12, 2025
1 parent 8464811 commit ed98f3f
Showing 1 changed file with 19 additions and 22 deletions.
41 changes: 19 additions & 22 deletions uber/models/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -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),
Expand Down

0 comments on commit ed98f3f

Please sign in to comment.