Skip to content

Conversation

@rodmgwgu
Copy link
Contributor

@rodmgwgu rodmgwgu commented Feb 4, 2026

This PR adds an ADR specifying the implementation strategy for the feature flag for AuthZ for Course Authoring.

Related issue: #184

Merge checklist:
Check off if complete or not applicable:

  • Version bumped
  • Changelog record added
  • Documentation updated (not only docstrings)
  • Fixup commits are squashed away
  • Unit tests added/updated
  • Manual testing instructions provided
  • Noted any: Concerns, dependencies, migration issues, deadlines, tickets

@openedx-webhooks openedx-webhooks added open-source-contribution PR author is not from Axim or 2U core contributor PR author is a Core Contributor (who may or may not have write access to this repo). labels Feb 4, 2026
@openedx-webhooks
Copy link

Thanks for the pull request, @rodmgwgu!

This repository is currently maintained by @openedx/committers-openedx-authz.

Once you've gone through the following steps feel free to tag them in a comment and let them know that your changes are ready for engineering review.

🔘 Get product approval

If you haven't already, check this list to see if your contribution needs to go through the product review process.

  • If it does, you'll need to submit a product proposal for your contribution, and have it reviewed by the Product Working Group.
    • This process (including the steps you'll need to take) is documented here.
  • If it doesn't, simply proceed with the next step.
🔘 Provide context

To help your reviewers and other members of the community understand the purpose and larger context of your changes, feel free to add as much of the following information to the PR description as you can:

  • Dependencies

    This PR must be merged before / after / at the same time as ...

  • Blockers

    This PR is waiting for OEP-1234 to be accepted.

  • Timeline information

    This PR must be merged by XX date because ...

  • Partner information

    This is for a course on edx.org.

  • Supporting documentation
  • Relevant Open edX discussion forum threads
🔘 Get a green build

If one or more checks are failing, continue working on your changes until this is no longer the case and your build turns green.

Details
Where can I find more information?

If you'd like to get more details on all aspects of the review process for open source pull requests (OSPRs), check out the following resources:

When can I expect my changes to be merged?

Our goal is to get community contributions seen and reviewed as efficiently as possible.

However, the amount of time that it takes to review and merge a PR can vary significantly based on factors such as:

  • The size and impact of the changes that it introduces
  • The need for product review
  • Maintenance status of the parent repository

💡 As a result it may take up to several weeks or months to complete a review and merge your PR.


When the flag state changes, automatic migration occurs immediately:

- **Flag enabled**: Legacy role assignments migrate to new system and are removed from legacy
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I’m trying to understand this and think through the implications here. My concern is that as we incrementally add new roles and functionality, we may still need to retain legacy roles for areas we haven’t migrated yet.

For example, if we introduce new roles and permissions for managing a course’s advanced settings, which existing legacy roles would be removed or superseded? And do any of those legacy roles still participate in other course permission checks that haven’t yet been replaced?

Copy link
Contributor Author

@rodmgwgu rodmgwgu Feb 4, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should be covered by this task: openedx/openedx-platform#37909

The compatibility layer should handle this. Now, we were specifying in that ticket to do the compatibility by comparing roles with their equivalents, but this means that this check wouldn't be a standard permission check for Casbin.

Perhaps, we can instead create a permission, like courses.legacy_staff_role_permissions (and others for the rest of existing roles), and check for that instead for the compatibility layer. This seems cleaner and in the future we just stop using that permission whenever the old system is fully deprecated.

What do you think?

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just one comment: I’d lean toward avoiding the removal of any legacy roles due to the scenario Taylor mentioned. If we do need to remove legacy roles, we may need an intermediate table to store existing legacy roles/permissions, since they could be involved in other permission checks outside of authoring (I’m not sure if this can actually happen).

Another option is to go with an “only code handler” approach, meaning this layer would not impact any rollback migrations. It’s true that this could add more complexity in the code, but once the uncertainty passes, we could deprecate this extra layer.

These are simply ideas to help think through the safest way to address the issue.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The detail here is that, because we will have ways for going back and forth between the legacy system and the new AuthZ system, if we kept data one side or the other, when going the other way we could have conflicts or unintended access to people that otherwise shouldn't have.

For example: Let's say that user1 has access to course1 in the legacy system. Then we migrate to the new system, and in the new system we remove access to course1 for that user. The we migrate back to the legacy system. If we didn't remove the old data, we would unintentionally give access back to course1 to user1.

That's why I'm proposing having a compatibility layer, in which any old code would still call the old functions, but at the core we would substitute the check for the new system in a compatible way.

Copy link
Contributor

@bmtcril bmtcril left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Overall looks good, it would be good to have a more specific plan to answer Taylor's question but I'm not sure we can do it without mapping the roles specifically and seeing exactly which ones may be problematic.

We will also undoubtedly run into issues during development as new permissions are migrated and the scripts are updated, but I'm hoping that as long as we start with a course admin role we'll be able to repair any damage we cause in dev.

Co-authored-by: Taylor Payne <taylor.payne2@wgu.edu>
@rodmgwgu rodmgwgu force-pushed the rod/adr-phase2-flag branch from f7436f8 to 9373d51 Compare February 5, 2026 16:12
@rodmgwgu rodmgwgu merged commit ced9562 into openedx:main Feb 5, 2026
14 checks passed
@github-project-automation github-project-automation bot moved this from Needs Triage to Done in Contributions Feb 5, 2026
@rodmgwgu rodmgwgu deleted the rod/adr-phase2-flag branch February 5, 2026 16:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

core contributor PR author is a Core Contributor (who may or may not have write access to this repo). open-source-contribution PR author is not from Axim or 2U

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

5 participants