From 843ca761119f0b786f4f0f31c3140508516af315 Mon Sep 17 00:00:00 2001 From: Petr Skoda Date: Sun, 15 Jan 2012 00:14:44 +0100 Subject: [PATCH] MDL-31127 init USER->access when switching roles Only admins were affected by this problem because has_capability() does not init USER->access for them. --- lib/accesslib.php | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/lib/accesslib.php b/lib/accesslib.php index 18eddedc9b5..db0a7d29f02 100644 --- a/lib/accesslib.php +++ b/lib/accesslib.php @@ -1002,6 +1002,7 @@ function get_empty_accessdata() { $accessdata['rdef_lcc'] = 0; // rdef_count during the last compression $accessdata['loaded'] = array(); // loaded course contexts $accessdata['time'] = time(); + $accessdata['rsw'] = array(); return $accessdata; } @@ -1149,7 +1150,7 @@ function reload_all_capabilities() { // copy switchroles $sw = array(); - if (isset($USER->access['rsw'])) { + if (!empty($USER->access['rsw'])) { $sw = $USER->access['rsw']; } @@ -3941,16 +3942,14 @@ function role_switch($roleid, context $context) { // // Note: it is not possible to switch to roles that do not have course:view - // Add the switch RA - if (!isset($USER->access['rsw'])) { - $USER->access['rsw'] = array(); + if (!isset($USER->access)) { + load_all_capabilities(); } + + // Add the switch RA if ($roleid == 0) { unset($USER->access['rsw'][$context->path]); - if (empty($USER->access['rsw'])) { - unset($USER->access['rsw']); - } return true; }