def mock_perm(perm='edx_proctoring.can_take_proctored_exam'): """ Context manager for mocking a specific permission to return False inside the block """ try: rules.set_perm(perm, rules.always_false) yield finally: rules.set_perm(perm, rules.always_true)
LOG = logging.getLogger(__name__) @rules.predicate def is_track_ok_for_exam(user, exam): """ Returns whether the user is in an appropriate enrollment mode """ course_id = CourseKey.from_string(exam['course_id']) return is_enrollment_valid_for_proctoring(user.username, course_id) # The edx_proctoring.api uses this permission to gate access to the # proctored experience can_take_proctored_exam = is_track_ok_for_exam rules.set_perm('edx_proctoring.can_take_proctored_exam', is_track_ok_for_exam) class HasAccessRule(Rule): """ A rule that calls `has_access` to determine whether it passes """ def __init__(self, action): self.action = action def check(self, user, instance=None): return has_access(user, self.action, instance) def query(self, user): # Return an always-empty queryset filter so that this always # fails permissions, but still passes the is_possible_for check
import rules from rules.predicates import is_superuser from adhocracy4.organisations.predicates import is_initiator from adhocracy4.organisations.predicates import is_org_member from adhocracy4.projects.predicates import is_live from adhocracy4.projects.predicates import is_moderator from adhocracy4.projects.predicates import is_project_member from adhocracy4.projects.predicates import is_public from adhocracy4.projects.predicates import is_semipublic rules.set_perm('a4projects.add_project', is_superuser | is_initiator) rules.set_perm('a4projects.change_project', is_superuser | is_initiator) rules.set_perm( 'a4projects.view_project', is_superuser | is_initiator | is_moderator | ((is_public | is_semipublic | is_org_member | is_project_member) & is_live)) rules.set_perm( 'a4projects.participate_in_project', is_superuser | is_initiator | is_moderator | ((is_public | is_org_member | is_project_member) & is_live))
""" django-rules for courseware related features """ from __future__ import absolute_import from opaque_keys.edx.keys import CourseKey from student.models import CourseEnrollment import rules @rules.predicate def is_verified_or_masters_track_exam(user, exam): """ Returns whether the user is in a verified or master's track """ course_id = CourseKey.from_string(exam['course_id']) mode, is_active = CourseEnrollment.enrollment_mode_for_user(user, course_id) return is_active and mode in ('verified', 'masters') # The edx_proctoring.api uses this permission to gate access to the # proctored experience can_take_proctored_exam = is_verified_or_masters_track_exam rules.set_perm('edx_proctoring.can_take_proctored_exam', is_verified_or_masters_track_exam)
def register(perms, app, model, action): """Register a rule.""" name = "{}.{}_{}".format(app, action, model) # Unconditionally overwrite any existing state rules.set_perm(name, perms.get(action, rules.always_deny))
""" django-rules for courseware related features """ from __future__ import absolute_import from course_modes.models import CourseMode from opaque_keys.edx.keys import CourseKey from student.models import CourseEnrollment import rules @rules.predicate def is_track_ok_for_exam(user, exam): """ Returns whether the user is in an appropriate enrollment mode """ course_id = CourseKey.from_string(exam['course_id']) mode, is_active = CourseEnrollment.enrollment_mode_for_user(user, course_id) return is_active and mode in (CourseMode.VERIFIED, CourseMode.MASTERS, CourseMode.PROFESSIONAL) # The edx_proctoring.api uses this permission to gate access to the # proctored experience can_take_proctored_exam = is_track_ok_for_exam rules.set_perm('edx_proctoring.can_take_proctored_exam', is_track_ok_for_exam)