Beispiel #1
0
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)
Beispiel #2
0
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)
Beispiel #3
0
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
Beispiel #4
0
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))
Beispiel #5
0
"""
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)
Beispiel #6
0
 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))
Beispiel #7
0
"""
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)