Add ADRs for FBE decisions
REVMI-39
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
1. Group Access Overrides
|
||||
=========================
|
||||
|
||||
Status
|
||||
------
|
||||
|
||||
Accepted
|
||||
|
||||
Context
|
||||
-------
|
||||
|
||||
In order to implement Feature Based Enrollment (FBE), we need to be able
|
||||
to automatically restrict content to a specific set of authorized
|
||||
users. This automatic restriction needs to be based on whether content
|
||||
is graded and capable of producing a score. Whether a particular XBlock
|
||||
is graded and scorable is denoted by attributes on that XBlock.
|
||||
|
||||
There are two separate systems that need load XBlocks and need to
|
||||
be restricted: the courseware rendering on the web, and the courseware
|
||||
rendering in the mobile app. Courseware rendering accesses XBlock
|
||||
attributes via the ``FieldData`` api, and can be modified by
|
||||
``FieldDataOverrides``. The mobile app uses the course_blocks api,
|
||||
which is backed by ``BlockTransformers``.
|
||||
|
||||
Most differentiated content is managed by ``UserPartitions``. These
|
||||
segment users by customizable criteria, and then can be applied as
|
||||
access control by setting the ``group_access`` field on an ``XBlock``.
|
||||
There is an existing ``UserPartition`` that segments users based on
|
||||
their enrollment track (the ``EnrollmentTrackUserPartition``. However,
|
||||
many courses already manage content using the ``EnrollmentTrackUserPartition``,
|
||||
so it isn't a good candidate to overwrite for FBE.
|
||||
|
||||
|
||||
Decision
|
||||
--------
|
||||
|
||||
In order to restrict access to graded content, we will create a new
|
||||
``UserPartition`` specifically for FBE. That partition will segment
|
||||
users based on their enrollment track and any other criteria that become
|
||||
relevant for FBE implementation. We will override the ``group_access``
|
||||
of all graded and scorable XBlocks by using a new ``FieldDataOverride``
|
||||
for in-courseware acccess, and a new ``BlockTransformer`` for mobile/
|
||||
course_blocks api access. Both of those will respect the same rules for
|
||||
when to override the ``group_access`` attribute.
|
||||
|
||||
Consequences
|
||||
------------
|
||||
|
||||
All graded content (with possible manual exceptions) will have ``group_access``
|
||||
overridden to assign the content to the "Full Access Only" partition of
|
||||
the new ``ContentTypeGatingPartition``. Studio Authors will see reference
|
||||
to both the ``ContentTypeGatingPartition`` (Feature Based Enrollment Partition)
|
||||
and the ``EnrollmentTrack`` partition in Studio, if they are authorized to
|
||||
modify them. Masquerade, which only modifies a single group at a time, is
|
||||
unable to provide an accurate simulation of the interaction between having
|
||||
graded content restricted behind the ``EnrollmentTrack`` partition.
|
||||
@@ -0,0 +1,37 @@
|
||||
2. No New Enrollment Mode
|
||||
=========================
|
||||
|
||||
Status
|
||||
------
|
||||
|
||||
Accepted
|
||||
|
||||
Context
|
||||
-------
|
||||
|
||||
In order to implement Feature Based Enrollment (FBE), we need a way
|
||||
to differentiate between users who have access to graded content
|
||||
and those who don't. We need to be able to move users between those
|
||||
groups. Users that have access to graded content should also get
|
||||
all of the current behavior associated with Verified users. We
|
||||
need to leave existing users (in any track) with their existing behavior.
|
||||
Many permissions related to Enrollment Modes are checked by checking
|
||||
whether an enrollment has a specific mode, which makes it hard
|
||||
to add a new mode that has the same set of permissions.
|
||||
|
||||
|
||||
Decision
|
||||
--------
|
||||
|
||||
Rather than adding a new Enrollment Track that we move Full-Access users
|
||||
into, we will add a new ``UserPartition`` to distinguish Limited-Access Users
|
||||
and Full-Access Users.
|
||||
|
||||
Consequences
|
||||
------------
|
||||
|
||||
Some Studio Authors see both the new ``ContentTypeGatingPartition`` and the
|
||||
``EnrollmentTrackUserPartition`` in their UI. Masquerade is unable to
|
||||
masquerade as a user in a specific group and see graded content that has
|
||||
been limited using the ``EnrollemntTrackUserPartition``, because it doesn't
|
||||
multi-select groups.
|
||||
@@ -0,0 +1,43 @@
|
||||
1. Pre-formatted Access Messages
|
||||
================================
|
||||
|
||||
Status
|
||||
------
|
||||
|
||||
Accepted
|
||||
|
||||
Context
|
||||
-------
|
||||
|
||||
In ``course_duration_limits``, we are adding a new permissions
|
||||
state that will restrict the user from entering the course.
|
||||
The point at which this condition is checked is deep within
|
||||
edx-platform, but the error message needs to display at the
|
||||
surface of the application. In order to preserve information
|
||||
display consistency, we want to receive the error message
|
||||
in the UI in a standard format. We can use ``AccessResponse.user_message``
|
||||
to store that permission-specific error message. However,
|
||||
different pages require more or less context. In particular,
|
||||
when displaying an access error message inside the courseware,
|
||||
we don't need to specify the current course, but when displaying
|
||||
the same message on the course dashboard, we do.
|
||||
|
||||
Decision
|
||||
--------
|
||||
|
||||
We will add a field to ``AccessResponse``, ``additional_context_user_message``,
|
||||
which will be used in non-course-specific contexts (for
|
||||
``course_duration_limits``. The name is non-specific in order to enable it
|
||||
to be used more generally by other access-control schemes that might have
|
||||
different levels of context display needs.
|
||||
|
||||
Consequences
|
||||
------------
|
||||
|
||||
``AccessResponse`` messages can be more detailed, and more specific
|
||||
to the required context. The additional attribute on ``AccessResponse``
|
||||
is somewhat vague, and potentially confusing to a new reader. Which additional
|
||||
context is relevant is not specified, so if we need more or different
|
||||
context (rather than just course-context), we will need to rework the
|
||||
current system or add more attributes.
|
||||
|
||||
Reference in New Issue
Block a user