Repository navigation
Conversation
This was referenced Oct 21, 2026
BryanttV
force-pushed
the
bav/instructor-authz-shared-infra
branch
2 times, most recently
from
October 22, 2026 15:56
c7012a1 to
7d48414
Compare
1 task
BryanttV
force-pushed
the
bav/instructor-authz-shared-infra
branch
2 times, most recently
from
October 26, 2026 21:46
e521b17 to
df2efbe
Compare
BryanttV
force-pushed
the
ks/issue-491-date-extensions-authz
branch
2 times, most recently
from
October 29, 2026 17:34
8434e96 to
2b07cab
Compare
Migrate ChangeDueDateView, GradedSubsectionsView and UnitExtensionsView to InstructorAuthzPermission, following the shared infrastructure from openedx-authz#486. GET endpoints require courses.view_learner_extensions, the POST endpoint requires courses.manage_learner_extensions. Both already had a matching default legacy check registered in LEGACY_PERMISSION_CHECKS, so the existing permission_name on each view is reused unchanged as the fallback when the authz.enable_course_authoring flag is disabled for the course. Add DateExtensionsAuthzTest covering Course Admin, Course Staff, a user with no permission, AuthZ denying a legacy instructor, and the legacy path with the flag off, for all three endpoints. Closes openedx-authz#491.
BryanttV
force-pushed
the
ks/issue-491-date-extensions-authz
branch
from
October 29, 2026 18:40
2b07cab to
114ad1c
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Stacked on top of openedx#39255 (not mergeable until that one lands, since it carries that PR's full diff). Migrates the three endpoints behind the Date Extensions tab to the shared Instructor Dashboard AuthZ infrastructure from openedx-authz#486, following the README's migration guide (
lms/djangoapps/instructor/authz/README.rst):authz_permissionGradedSubsectionsViewcourses.view_learner_extensionspermissions.VIEW_DASHBOARDUnitExtensionsViewcourses.view_learner_extensionspermissions.VIEW_DASHBOARDChangeDueDateViewcourses.manage_learner_extensionspermissions.GIVE_STUDENT_EXTENSIONEach view keeps its existing
permission_name:LEGACY_PERMISSION_CHECKSinlms/djangoapps/instructor/authz/legacy.pyalready maps bothCOURSES_VIEW_LEARNER_EXTENSIONS/COURSES_MANAGE_LEARNER_EXTENSIONStobridgekeeper_check(permissions.VIEW_DASHBOARD)/bridgekeeper_check(permissions.GIVE_STUDENT_EXTENSION)respectively (built as part of openedx#39255), so this is a "Single permission" migration per the README, no new legacy-check code needed. Withauthz.enable_course_authoringdisabled for a course, behavior is byte-for-byte what it was before this PR.The Date Extensions tab's own visibility logic (
can_see("date_extensions", authz_legacy.has_instructor_access)inserializers_v2.py) was already wired up in openedx#39255, so this PR only touches the three endpoint views and their tests, nothing in the tab-visibility/serializer code.Fixes openedx-authz#491.
Testing
Added
DateExtensionsAuthzTesttotest_api_v2_authz.py(next to the existingCourseMetadataViewAuthzTestfrom openedx#39255), covering all three endpoints:is_user_allowed.assert_not_called()).Also ran the existing (pre-this-PR) tests for these three views to confirm nothing regressed for the legacy path:
GradedSubsectionsViewTest,UnitExtensionsViewTest(intest_api_v2.py), andTestChangeDueDateV2/TestDueDateExtensions(intest_api.py). All pass unchanged.Full suite:
lms/djangoapps/instructor/(1045 passed).ruff,pylint,lint-importsclean.Note for local testing: if you hit
ImportErrors unrelated to this diff when running these tests (AccountActivationEmailContextGeneratedfromopenedx_filters, orFullScopePolicyfromedx_rest_framework_extensions), your devstack's LMS venv hasopenedx-filters/edx-drf-extensionsolder than whatrequirements/edx/base.txtpins. That's what I hit too; fixed locally with:(or whatever those requirements currently pin). Unrelated to this PR's code, just a stale local environment.
Deadline
None