Skip to content

Commit f2dae3a

Browse files
author
root
committed
Adds role mapping from Idp
1 parent 3ed822e commit f2dae3a

File tree

4 files changed

+76
-0
lines changed

4 files changed

+76
-0
lines changed

auth.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -695,6 +695,7 @@ public function saml_login_complete($attributes) {
695695
set_config('siteadmins', implode(',', $admins));
696696
}
697697

698+
sync_roles($user, $attributes, $this->config);
698699
// Make sure all user data is fetched.
699700
$user = get_complete_user_data('username', $user->username);
700701

lang/en/auth_saml2.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,3 +210,13 @@
210210
$string['regeneratepath'] = 'Certificate path path: {$a}';
211211
$string['regenerateheader'] = 'Regenerate Private Key and Certificate';
212212
$string['regeneratesuccess'] = 'Private Key and Certificate successfully regenerated';
213+
214+
/*
215+
* Role mapping
216+
*/
217+
$string['saml_role_map'] = "Role";
218+
$string['saml_rolemapping'] = "Role Mapping";
219+
$string['saml_rolemapping_head'] = "The IdP can use it's own roles. Set in this section the mapping between IdP and Moodle roles. Accepts multiple valued comma separated. Example: admin,owner,superuser.";
220+
$string['saml_role_siteadmin_map'] = "Site administrators";
221+
$string['saml_role_coursecreator_map'] = "Course creator";
222+
$string['saml_role_manager_map'] = "Manager";

locallib.php

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -545,3 +545,32 @@ function auth_saml2_admin_nav($title, $url) {
545545
$PAGE->set_title(get_string('pluginname', 'auth_saml2') . ': ' . $title);
546546
}
547547

548+
549+
/**
550+
* Map user roles from Roles array
551+
*
552+
*/
553+
function sync_roles($user,$attributes,$config) {
554+
global $CFG, $DB;
555+
556+
// Process siteadmin (special, they are stored at mdl_config)
557+
if(in_array($config->saml_role_siteadmin_map,$attributes['Role'])){
558+
$siteadmins = explode(',', $CFG->siteadmins);
559+
if (!in_array($user->id, $siteadmins)) {
560+
$siteadmins[] = $user->id;
561+
$newAdmins = implode(',', $siteadmins);
562+
set_config('siteadmins', $newAdmins);
563+
}
564+
}
565+
566+
// Process coursecreator and manager
567+
$syscontext = context_system::instance();
568+
if(in_array($config->saml_role_coursecreator_map,$attributes['Role'])){
569+
$creatorrole = $DB->get_record('role', array('shortname'=>'coursecreator'), '*', MUST_EXIST);
570+
role_assign($creatorrole->id, $user->id, $syscontext);
571+
}
572+
if (in_array($config->saml_role_manager_map, $attributes['Role'])) {
573+
$managerrole = $DB->get_record('role', array('shortname'=>'manager'), '*', MUST_EXIST);
574+
role_assign($managerrole->id, $user->id, $syscontext);
575+
}
576+
}

settings.php

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -280,6 +280,42 @@
280280
$authplugin->get_ssp_version()
281281
));
282282

283+
// Role mapping
284+
$name = 'auth_saml2/field_map_role';
285+
$title = get_string('saml_role_map', 'auth_saml2');
286+
$description = '';
287+
$default = '';
288+
$setting = new admin_setting_configtext($name, $title, $description, $default, PARAM_ALPHANUMEXT);
289+
$settings->add($setting);
290+
291+
$settings->add(
292+
new admin_setting_heading(
293+
'auth_saml2/saml_rolemapping',
294+
new lang_string('saml_rolemapping', 'auth_saml2'),
295+
new lang_string('saml_rolemapping_head', 'auth_saml2')
296+
)
297+
);
298+
299+
$name = 'auth_saml2/saml_role_siteadmin_map';
300+
$title = get_string('saml_role_siteadmin_map', 'auth_saml2');
301+
$description = '';
302+
$default = '';
303+
$setting = new admin_setting_configtext($name, $title, $description, $default, PARAM_ALPHANUMEXT);
304+
$settings->add($setting);
305+
306+
$name = 'auth_saml2/saml_role_coursecreator_map';
307+
$title = get_string('saml_role_coursecreator_map', 'auth_saml2');
308+
$description = '';
309+
$default = '';
310+
$setting = new admin_setting_configtext($name, $title, $description, $default, PARAM_ALPHANUMEXT);
311+
$settings->add($setting);
312+
313+
$name = 'auth_saml2/saml_role_manager_map';
314+
$title = get_string('saml_role_manager_map', 'auth_saml2');
315+
$description = '';
316+
$default = '';
317+
$setting = new admin_setting_configtext($name, $title, $description, $default, PARAM_ALPHANUMEXT);
318+
$settings->add($setting);
283319

284320
// Display locking / mapping of profile fields.
285321
$help = get_string('auth_updatelocal_expl', 'auth');

0 commit comments

Comments
 (0)