Add ADRs for FBE decisions

REVMI-39
This commit is contained in:
Calen Pennington
2019-01-14 13:06:08 -05:00
parent 8caab70844
commit 4ac3caab23
4 changed files with 186 additions and 0 deletions

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.