From cef8e072ff354be2d1495531bbb42501b841490c Mon Sep 17 00:00:00 2001 From: Murtaza Sultani Date: Mon, 16 Feb 2026 15:43:22 +0100 Subject: =?UTF-8?q?Resolve=20"LTI=201.3a:=20User-Roles=20wird=20beim=20Lau?= =?UTF-8?q?nch=20nicht=20korrekt=20=C3=BCbermittelt"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Closes #6266 Merge request studip/studip!4738 --- app/controllers/course/lti.php | 7 ++--- lib/classes/LTI13a/PlatformManager.php | 15 ---------- lib/classes/LTI13a/RoleMapper.php | 53 ++++++++++++++++++++++++++++++++++ 3 files changed, 56 insertions(+), 19 deletions(-) create mode 100644 lib/classes/LTI13a/RoleMapper.php diff --git a/app/controllers/course/lti.php b/app/controllers/course/lti.php index 6069a00..df419e4 100644 --- a/app/controllers/course/lti.php +++ b/app/controllers/course/lti.php @@ -15,6 +15,7 @@ use Studip\LTI13a\Registration; use Studip\LTI13a\RegistrationManager; use OAT\Library\Lti1p3Core\Message\Payload\MessagePayloadInterface\MessagePayloadInterface; use LtiResourceLink as LtiResourceLinkModel; +use Studip\LTI13a\RoleMapper; /** * course/lti.php - LTI consumer API for Stud.IP @@ -306,9 +307,7 @@ class Course_LtiController extends StudipController $registration, $GLOBALS['user']->id, $this->resource_link->deployment_id, - [ - PlatformManager::getLtiRoleClaimForStudipRole($GLOBALS['perm']->get_studip_perm($this->course_id)) - ], + RoleMapper::fromLocal($GLOBALS['perm']->get_studip_perm($this->course_id)), array_merge( [ new ContextClaim( @@ -538,7 +537,7 @@ class Course_LtiController extends StudipController $GLOBALS['user']->id, null, $this->link->deployment_id, - [PlatformManager::getLtiRoleClaimForStudipRole($GLOBALS['perm']->get_studip_perm($this->course_id))] + RoleMapper::fromLocal($GLOBALS['perm']->get_studip_perm($this->course_id)) ); $this->render_text($message->toHtmlRedirectForm()); } else { 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 @@ + [ + 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 => [] + }; + } +} -- cgit v1.0