Roles and permissions
MTP’s roles are the 1EdTech (IMS) LIS v2 vocabulary — the same role URIs
LTI 1.3 carries in its roles claim — so LTI launches, NRPS rosters, and
MTP’s own RBAC speak one language with no translation layer. Every role
stores its canonical URI alongside the enum for wire fidelity.
Roles exist at three tiers.
Tier 1 — System roles
Platform-wide roles, held outside any tenant:
| Enum | LIS system role |
|---|---|
APPLICATION_OWNER | http://purl.imsglobal.org/vocab/lis/v2/system/person#Administrator |
USER | http://purl.imsglobal.org/vocab/lis/v2/system/person#User |
Tier 2 — Institution roles
Held on an organization membership. Accounts belong to exactly one organization:
| Enum | LIS institution role | Typical holder |
|---|---|---|
ADMINISTRATOR | http://purl.imsglobal.org/vocab/lis/v2/institution/person#Administrator | Org owner, program administrator |
FACULTY | http://purl.imsglobal.org/vocab/lis/v2/institution/person#Faculty | Instructional staff |
STAFF | http://purl.imsglobal.org/vocab/lis/v2/institution/person#Staff | Authors, reviewers, ops staff |
MENTOR | http://purl.imsglobal.org/vocab/lis/v2/institution/person#Mentor | Supervisors, coaches |
LEARNER | http://purl.imsglobal.org/vocab/lis/v2/institution/person#Learner (paired with #Student) | Trainees |
OBSERVER | http://purl.imsglobal.org/vocab/lis/v2/institution/person#Observer | Executives, auditors, read-only stakeholders |
GUEST | http://purl.imsglobal.org/vocab/lis/v2/institution/person#Guest | External or temporary access |
Tier 3 — Context roles
Scoped to a course or cohort. The five core LIS context roles ship as the
base set, with standard sub-roles stored as a subRoles[] list:
| Enum | LIS context role | Standard sub-roles used at launch |
|---|---|---|
ADMINISTRATOR | http://purl.imsglobal.org/vocab/lis/v2/membership#Administrator | #Support, #Developer |
CONTENT_DEVELOPER | http://purl.imsglobal.org/vocab/lis/v2/membership#ContentDeveloper | #ContentExpert, #Librarian |
INSTRUCTOR | http://purl.imsglobal.org/vocab/lis/v2/membership#Instructor | #TeachingAssistant, #Grader, #PrimaryInstructor |
LEARNER | http://purl.imsglobal.org/vocab/lis/v2/membership#Learner | #GuestLearner |
MENTOR | http://purl.imsglobal.org/vocab/lis/v2/membership#Mentor | #Reviewer, #Auditor, #Advisor, #Tutor |
Extending the vocabulary
Where the standard vocabulary lacks a needed distinction, MTP extends with
custom sub-roles under an MTP namespace URI
(https://vocab.train.hopemtp.app/lis#<SubRole>). The LIS specification
explicitly permits custom URIs, and third-party LMSes ignore unknown ones
gracefully. A new base role is never invented — an extension is always a
sub-role of one of the five core context roles.
Permissions are separate from roles
Roles are standard labels; capabilities are a separable permissions[]
list. The LMS-side catalog:
MANAGE_USERS, MANAGE_CONTENT, AUTHOR_CONTENT, APPROVE_CONTENT,
REVIEW_PROVENANCE, MANAGE_FLOWS, MANAGE_RUBRICS, MANAGE_COHORTS,
MANAGE_ASSIGNMENTS, VIEW_ANALYTICS, MANAGE_INTEGRATIONS,
MANAGE_HOPE_CONNECTION, MANAGE_SSO
plus the Metahuman Studio set mirrored 1:1 from HOPE’s own catalog:
MANAGE_METAHUMANS, MANAGE_GUARDRAILS, MANAGE_WORKFLOWS,
MANAGE_DATASETS, MANAGE_TOOLS, MANAGE_VOICES
plus an isFullAdmin flag.
Role-to-permission bundles are tenant-configurable data. Defaults ship per role; tenants adjust them without code changes or migrations.
Vertical personas are mappings, not roles
Vertical-specific personas — officer, trainer, author, approver, supervisor,
program administrator — are mappings onto the standard roles plus a
permission bundle, never first-class roles. For example, a “CBP Trainer” is
institution FACULTY with context INSTRUCTOR; an “Approver” is STAFF
with context CONTENT_DEVELOPER#ContentExpert and the AUTHOR_CONTENT and
APPROVE_CONTENT permissions; a “Field Supervisor” is MENTOR with context
MENTOR#Advisor and unit-scoped VIEW_ANALYTICS.
Because MTP’s internal roles are the LIS vocabulary, LTI 1.3 launch
roles claims and NRPS memberships map onto MTP memberships 1:1.