CenterForDigitalHumanities / TPEN-interfaces

Vanilla default and internally useful interfaces for the TPEN ecosystem that exemplify how you might build your own interfaces for specific projects.
0 stars 1 forks source link

Interfaces for classroom groups #23

Open cubap opened 2 months ago

cubap commented 2 months ago

Create a suite of interfaces for supporting the creation and management of a TPEN group that represents a classroom group.

Accommodations

Membership

Permissions and Roles

The "Roles" for a member of a Project match those listed above, but mean nothing without the Permissions applied. The Permissions are what is checked by the Interface to allow access to the various resources or determine what visualizations might be needed. A newly created Project (if otherwise unconfigured) has an OWNER/LEADER by default, though only the OWNER is required and will always be applied to a Project. OWNER is a superadmin and can do anything at all, including reassigning the OWNER. LEADER is a very generous default and allows for managing all Project resources, configuration, and membership.

Roles and Permissions, however, are scoped to the Project and can be set to anything at all. There is a still undefined set of shared permissions that will allow interfaces to understand each other's restrictions, but customization is always allowed.

User Stories

Lacunae (fancy manuscript word for things we know are missing)

Invite to group is not possible right now but that is a goal for August that we are confident we will meet.

Project-for-Interface Data Model is not defined yet. There are some documents describing expectations, but as very few Interfaces exist yet, this will evolve. An example of this is in https://github.com/CenterForDigitalHumanities/TPEN-services/issues/114 where a Project will be created with a manifest (which may be a Manifest or Collection), tools, options, and contributors with all the members and permissions.

Entity Classes and methods for Interfaces are a utility that is partially designed but does not exist. Their use is not required, but it will help in the future to be able to Project.inviteUser( id, role ) or Line.getText( { creator: me } ) or User.assignRole("LEADER"). For now, the TPEN-Services API is the closest we get.

Permissions and Roles are not defined, but also not authoritative. On the server, the practice will be to assume Roles are not hierarchical and to seek what is allowed. That means "MODIFY_LINES_ALL" and "MODIFY_LINES_TEXT" are redundant, rather than limiting the User to only change text content and not boundaries. A Permission like "VIEW_ALL" without others is more correct than "READONLY". The expected pattern at the moment is ACTION_ENTITY_SCOPE but it may change. Custom interfaces can attach whatever custom Permissions needed, but the server will have a limited vocabulary to verify access when an update is posted.

Assignments and Committed Work is listed as a Nice-to-Have but not specified by the main grant, so there is flexibility in how this is approached, if at all. I would expect that the flexibility of the Project data model can be used to park a subdocument within a custom property like

{ "assignments" : [
    { "label"     : "Week 1 Reading",
      "range"     : "AnnotationPageID",
      "available" : "startDate"
    } ]
}

with whatever instructions or description makes sense for the special Interface to know about. Similarly, when a User commits/submits an assignment (marks a task complete or whatever) it doesn't really belong in RERUM as Linked Open Data, but its unique ID at the time can be stored in a custom field on the Project:

{ "submissions" : [
    { "memberID" : { "assignment" : { 
        "date"  : "NOW", // This may be enough with a complex query
        "uri"   : "AnnotationPageID",
        "score" : "4/6"
    } } } ]
}

Scheduled Access is problematic. Everything created in TPEN is Open by default and certainly a group member can see the resources, so if there are pages in a Project that should not be accessed, it will have to rely on some amount of trust. A Student may have no Permissions granted from the common vocabulary, so they could not see anything in the generic TPEN interfaces, but perhaps the classroom interface can honor custom timecodes. This may cause issues with updates, however. The best solution perhaps, would be to contain the students in a set of predefined interfaces that do not link out to generic TPEN until the work is completed. Maybe there is a suggestion here for a "hidden" tag or visibility property that keeps Projects out of a main page list for Users or something.

Generic Interfaces largely haven't been made yet, so there is not something to work straight off of or draw from. Some of the User stories may be fulfilled by a generic interface and not require specific work. I suggest planning to work on things that are most self-contained earlier in the year.

cubap commented 2 months ago

Okay, @MutyaSowmya123, this is ready to go. Please leave a comment linking into the repository or issue set this spawns.

cubap commented 1 month ago

image @MutyaSowmya123 We've made some choices and you can share this with the group.

MutyaSowmya123 commented 1 month ago

Sure Patrick!