hypothesis / product-backlog

Where new feature ideas and current bugs for the Hypothesis product live
118 stars 7 forks source link

Canvas users have to manually create and join Hypothesis groups #341

Closed seanh closed 6 years ago

seanh commented 7 years ago

See also

Problem

Teachers using the Canvas app commonly create a private Hypothesis group for each Canvas course (or for large courses, maybe one Hypothesis group for each section or group within the course - this isn't 100% clear to me yet). Currently the teacher needs to:

  1. Create a Hypothesis private group, including creating a unique name for the group (Hypothesis group names don't strictly need to be unique but being a member of multiple groups with the same name would be confusing)
  2. Invite all of the students to join the group, by sharing the group link with them
  3. Make sure that all the students have successfully joined the group

Students can't begin a group-based Hypothesis annotation assignment in Canvas until they've joined the relevant Hypothesis group.

After successfully joining the Hypothesis group, on launching Hypothesis within the Canvas exercise, each student must select the correct group from the groups dropdown menu in Hypothesis before they begin annotating. Since you can't move annotations between groups in Hypothesis, if students create (possibly many) annotations in the wrong group they need to delete them and manually recreate them one by one. The Public group (or other most recently used group) will be the default selected group, not the one created for the course.

Dependencies

Rejected solution: publisher group

One possible solution would be to use publisher groups, as we do for publisher sites such as eLife: there is one big publisher group for each publisher, and whenever Hypothesis is launched on a publisher's site it's locked to this publisher group.

Publisher groups don't seem appropriate for the Canvas use case because rather than one small private group for each course, you would get one big public group for all of Canvas.

For example if one class had annotated a document and then later another class (perhaps taking the same course in a later semester, or perhaps a class from a completely different school) tried to annotate the same document for their own assignment they would find the first class's annotations already on the document and viewable to them. Two classes simultaneously annotating the same document in different course or schools would see each other's annotations appearing in real time. All Canvas users would be in one big group.

If we implement a publisher group for Canvas and then later implement a better solution, e.g. per-course groups, then what would we do with the existing Canvas publisher group? It would contain students annotations, which they may still want access to.

There are variations on the publisher group approach that might be possible with more work, but these don't seem a great fit either. For example separate publisher groups for each Canvas instance, or each installation of our Canvas app.

Suggested solution

When Hypothesis is launched within Canvas:

  1. The Canvas app should create a private group, within the Canvas authority, for the Canvas course that the Canvas app is currently being used in, if such a group doesn't already exist.

  2. The Canvas user (student or teacher) who has launched the Canvas app should automatically be a member of the group.

  3. The Hypothesis client should be locked to this "course group" in the groups dropdown menu.

Questions

jeremydean commented 7 years ago

I really like the suggested solution. Thanks for you thoughtful exploration here, @seanh.

judell commented 7 years ago

+1. A members-read-write group in an authority is what I was hoping for. We do know, on the LTI launch, the user's real name, with Canvas institution and user id as disambiguators.

jeremydean commented 6 years ago

@seanh looking back on this after what i've learned in the interim, i think this is still close to the right solution. wondering if this architecture is possible, though:

so, essentially, we have a private group with private groups within it.

seanh commented 6 years ago

@jeremydean This "group that contains other groups" is being called an "organization" in the code right now. And sure, I think the notion of a private organization containing all-private groups might be possible.

judell commented 6 years ago

About a year ago I stitched together the Canvas alpha and the publisher accounts prototype, just to get a feel for those pieces working together: http://jonudell.net/h/h_canvas_auth_01.mp4

If nobody gets there first, I might revisit that in light of the new groups machinery just to see what's involved.

ajpeddakotla commented 6 years ago

Closing this issue but tagging it for reference in 596 and 595.