Convert a has_access check into a bridgekeeper rule
This reverts commit 5e8f90caa1.
This commit is contained in:
9
lms/djangoapps/courseware/permissions.py
Normal file
9
lms/djangoapps/courseware/permissions.py
Normal file
@@ -0,0 +1,9 @@
|
||||
"""
|
||||
Permission definitions for the courseware djangoapp
|
||||
"""
|
||||
|
||||
from bridgekeeper import perms
|
||||
from .rules import HasAccessRule
|
||||
|
||||
VIEW_COURSE_HOME = 'courseware.view_course_home'
|
||||
perms[VIEW_COURSE_HOME] = HasAccessRule('load')
|
||||
@@ -1,12 +1,16 @@
|
||||
"""
|
||||
django-rules for courseware related features
|
||||
django-rules and Bridgekeeper rules for courseware related features
|
||||
"""
|
||||
from __future__ import absolute_import
|
||||
|
||||
from bridgekeeper.rules import Rule
|
||||
from course_modes.models import CourseMode
|
||||
from django.db.models import Q
|
||||
from opaque_keys.edx.keys import CourseKey
|
||||
from student.models import CourseEnrollment
|
||||
|
||||
from .access import has_access
|
||||
|
||||
import rules
|
||||
|
||||
|
||||
@@ -24,3 +28,21 @@ def is_track_ok_for_exam(user, exam):
|
||||
# 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
|
||||
# that is used to determine if the rule should allow a user
|
||||
# into django admin
|
||||
return Q(pk__in=[])
|
||||
|
||||
@@ -57,6 +57,7 @@ from courseware.courses import (
|
||||
from courseware.masquerade import setup_masquerade
|
||||
from courseware.model_data import FieldDataCache
|
||||
from courseware.models import BaseStudentModuleHistory, StudentModule
|
||||
from courseware.permissions import VIEW_COURSE_HOME
|
||||
from courseware.url_helpers import get_redirect_url
|
||||
from courseware.user_state_client import DjangoXBlockUserStateClient
|
||||
from edxmako.shortcuts import marketing_link, render_to_response, render_to_string
|
||||
@@ -810,7 +811,7 @@ def course_about(request, course_id):
|
||||
staff_access = bool(has_access(request.user, 'staff', course))
|
||||
studio_url = get_studio_url(course, 'settings/details')
|
||||
|
||||
if has_access(request.user, 'load', course):
|
||||
if request.user.has_perm(VIEW_COURSE_HOME, course):
|
||||
course_target = reverse(course_home_url_name(course.id), args=[text_type(course.id)])
|
||||
else:
|
||||
course_target = reverse('about_course', args=[text_type(course.id)])
|
||||
|
||||
Reference in New Issue
Block a user