-
Notifications
You must be signed in to change notification settings - Fork 5
docs: add ADR on Course Authoring Feature Flag Implementation Details #212
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
|
Thanks for the pull request, @rodmgwgu! This repository is currently maintained by 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 approvalIf you haven't already, check this list to see if your contribution needs to go through the product review process.
🔘 Provide contextTo 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:
🔘 Get a green buildIf one or more checks are failing, continue working on your changes until this is no longer the case and your build turns green. DetailsWhere 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:
💡 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 |
There was a problem hiding this comment.
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?
There was a problem hiding this comment.
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?
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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.
bmtcril
left a comment
There was a problem hiding this 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>
f7436f8 to
9373d51
Compare
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: