diff options
| author | Murtaza Sultani <sultani@data-quest.de> | 2026-02-16 15:43:22 +0100 |
|---|---|---|
| committer | Murtaza Sultani <sultani@data-quest.de> | 2026-02-16 15:43:22 +0100 |
| commit | cef8e072ff354be2d1495531bbb42501b841490c (patch) | |
| tree | 20b964d2786f23cd313160ee97b2faed95e88d47 /lib/classes | |
| parent | 7295a1eb22d399d457245383b593835bdc98f0e3 (diff) | |
Resolve "LTI 1.3a: User-Roles wird beim Launch nicht korrekt übermittelt"
Closes #6266
Merge request studip/studip!4738
Diffstat (limited to 'lib/classes')
| -rw-r--r-- | lib/classes/LTI13a/PlatformManager.php | 15 | ||||
| -rw-r--r-- | lib/classes/LTI13a/RoleMapper.php | 53 |
2 files changed, 53 insertions, 15 deletions
diff --git a/lib/classes/LTI13a/PlatformManager.php b/lib/classes/LTI13a/PlatformManager.php index 9017267..95c4c66 100644 --- a/lib/classes/LTI13a/PlatformManager.php +++ b/lib/classes/LTI13a/PlatformManager.php @@ -70,21 +70,6 @@ class PlatformManager return \Keyring::generate('lti13a_platform', 'global'); } - public static function getLtiRoleClaimForStudipRole(string $role) : string - { - if (in_array($role, ['dozent', 'admin', 'root'])) { - //Lecturer/admin - return 'http://purl.imsglobal.org/vocab/lis/v2/membership#Instructor'; - } elseif ($role === 'tutor') { - return 'http://purl.imsglobal.org/vocab/lis/v2/membership#Mentor'; - } elseif (in_array($role, ['user', 'autor'])) { - //Learner - return 'http://purl.imsglobal.org/vocab/lis/v2/membership#Learner'; - } - //Invalid role: - return ''; - } - /** * Generates the URL for returning from the tool in an LTI deep linking process. * diff --git a/lib/classes/LTI13a/RoleMapper.php b/lib/classes/LTI13a/RoleMapper.php new file mode 100644 index 0000000..c94abea --- /dev/null +++ b/lib/classes/LTI13a/RoleMapper.php @@ -0,0 +1,53 @@ +<?php +namespace Studip\LTI13a; + +final class RoleMapper +{ + // Global + const LTI_SYSTEM_ADMIN = 'http://purl.imsglobal.org/vocab/lis/v2/system/person#Administrator'; + const LTI_SYSTEM_USER = 'http://purl.imsglobal.org/vocab/lis/v2/system/person#User'; + + // Institution + const LTI_INSTITUTION_ADMIN = 'http://purl.imsglobal.org/vocab/lis/v2/institution/person#Administrator'; + + + // Course + const LTI_COURSE_ADMIN = 'http://purl.imsglobal.org/vocab/lis/v2/membership#Administrator'; + const LTI_COURSE_INSTRUCTOR = 'http://purl.imsglobal.org/vocab/lis/v2/membership#Instructor'; + const LTI_COURSE_TA = 'http://purl.imsglobal.org/vocab/lis/v2/membership#TeachingAssistant'; + const LTI_COURSE_MENTOR = 'http://purl.imsglobal.org/vocab/lis/v2/membership#Mentor'; + const LTI_COURSE_LEARNER = 'http://purl.imsglobal.org/vocab/lis/v2/membership#Learner'; + const LTI_COURSE_OBSERVER = 'http://purl.imsglobal.org/vocab/lis/v2/membership#Observer'; + + public static function fromLocal(string $localRole): array + { + return match(strtolower($localRole)) { + 'root' => [ + self::LTI_SYSTEM_ADMIN, + self::LTI_INSTITUTION_ADMIN, + self::LTI_COURSE_ADMIN + ], + 'admin' => [ + self::LTI_INSTITUTION_ADMIN, + self::LTI_COURSE_ADMIN + ], + 'dozent' => [ + self::LTI_COURSE_INSTRUCTOR, + self::LTI_COURSE_TA, + self::LTI_COURSE_MENTOR + ], + 'tutor' => [ + self::LTI_COURSE_TA, + self::LTI_COURSE_MENTOR + ], + 'autor' => [ + self::LTI_COURSE_LEARNER, + self::LTI_COURSE_OBSERVER + ], + 'user' => [ + self::LTI_COURSE_OBSERVER + ], + default => [] + }; + } +} |
