def has_permission(user, proposal, speaker=False, reviewer=False): """ Returns whether or not ther user has permission to review this proposal, with the specified requirements. If ``speaker`` is ``True`` then the user can be one of the speakers for the proposal. If ``reviewer`` is ``True`` the speaker can be a part of the reviewer group. """ if user.is_superuser: return True if speaker: if user == proposal.speaker.user or \ proposal.additional_speakers.filter(user=user).exists(): return True if reviewer: if user.groups.filter(name="reviewers").exists(): return True return False