Skip to content

Commit eba899a

Browse files
committed
Fix bug with checking new format for roles (#10)
1 parent 15b3967 commit eba899a

File tree

1 file changed

+37
-7
lines changed

1 file changed

+37
-7
lines changed

src/User.php

Lines changed: 37 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -226,14 +226,44 @@ public function isLearner()
226226
*/
227227
private function hasRole($role)
228228
{
229-
$role2 = null;
230-
if ((substr($role, 0, 4) !== 'urn:') && (substr($role, 0, 7) !== 'http://') && (substr($role, 0, 8) !== 'https://')) {
231-
$role2 = 'http://purl.imsglobal.org/vocab/lis/v2/membership#' . $role;
232-
$role = 'urn:lti:role:ims/lis/' . $role;
233-
}
234229
$ok = in_array($role, $this->roles);
235-
if (!$ok && !empty($role2)) {
236-
$ok = in_array($role2, $this->roles);
230+
if (!$ok && (strpos($role, 'urn:') !== 0) && (strpos($role, 'http://') !== 0) && (strpos($role, 'https://') !== 0)) {
231+
$role = "urn:lti:role:ims/lis/{$role}";
232+
$ok = in_array($role, $this->roles);
233+
}
234+
if (!$ok) {
235+
$role2 = null;
236+
$role3 = null;
237+
if (strpos($role, 'urn:') === 0) {
238+
if (strpos($role, 'urn:lti:role:ims/lis/') === 0) {
239+
$role2 = 'http://purl.imsglobal.org/vocab/lis/v2/membership#' . substr($role, 21);
240+
} elseif (strpos($role, 'urn:lti:instrole:ims/lis/') === 0) {
241+
$role2 = 'http://purl.imsglobal.org/vocab/lis/v2/person#' . substr($role, 25);
242+
$role3 = 'http://purl.imsglobal.org/vocab/lis/v2/institution/person#' . substr($role, 25);
243+
} elseif (strpos($role, 'urn:lti:sysrole:ims/lis/') === 0) {
244+
$role2 = 'http://purl.imsglobal.org/vocab/lis/v2/person#' . substr($role, 24);
245+
$role3 = 'http://purl.imsglobal.org/vocab/lis/v2/system/person#' . substr($role, 24);
246+
}
247+
} elseif (strpos($role, 'http://purl.imsglobal.org/vocab/lis/v2/') === 0) {
248+
if (strpos($role, 'http://purl.imsglobal.org/vocab/lis/v2/membership#') === 0) {
249+
$role2 = 'urn:lti:role:ims/lis/' . substr($role, 50);
250+
} elseif (strpos($role, 'http://purl.imsglobal.org/vocab/lis/v2/person#') === 0) {
251+
$role2 = 'urn:lti:instrole:ims/lis/' . substr($role, 46);
252+
$role3 = 'urn:lti:sysrole:ims/lis/' . substr($role, 46);
253+
} elseif (strpos($role, 'http://purl.imsglobal.org/vocab/lis/v2/institution/person#') === 0) {
254+
$role2 = 'urn:lti:instrole:ims/lis/' . substr($role, 58);
255+
$role3 = 'http://purl.imsglobal.org/vocab/lis/v2/person#' . substr($role, 58);
256+
} elseif (strpos($role, 'http://purl.imsglobal.org/vocab/lis/v2/system/person#') === 0) {
257+
$role2 = 'urn:lti:sysrole:ims/lis/' . substr($role, 53);
258+
$role3 = 'http://purl.imsglobal.org/vocab/lis/v2/person#' . substr($role, 53);
259+
}
260+
}
261+
if (!empty($role2)) {
262+
$ok = in_array($role2, $this->roles);
263+
if (!$ok && !empty($role3)) {
264+
$ok = in_array($role3, $this->roles);
265+
}
266+
}
237267
}
238268

239269
return $ok;

0 commit comments

Comments
 (0)