From 79556891f8f92d985fa6d53fe282988112a45284 Mon Sep 17 00:00:00 2001 From: Petr Skoda Date: Tue, 26 Oct 2010 07:51:09 +0000 Subject: [PATCH] MDL-24847 fixed problem when default roles have probibit capabilities --- lib/accesslib.php | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/lib/accesslib.php b/lib/accesslib.php index c224396583b..d2aaa98e68f 100755 --- a/lib/accesslib.php +++ b/lib/accesslib.php @@ -4849,7 +4849,11 @@ function get_users_by_capability($context, $capability, $fields = '', $sort = '' AND roleid IN (".implode(',', array_keys($needed[$cap])) .")"; } } else { - if (!empty($needed[$cap][$defaultuserroleid]) or ($isfrontpage and !empty($needed[$cap][$defaultfrontpageroleid]))) { + if (!empty($prohibited[$cap][$defaultuserroleid]) or ($isfrontpage and !empty($prohibited[$cap][$defaultfrontpageroleid]))) { + // nobody can have this cap because it is prevented in default roles + continue; + + } else if (!empty($needed[$cap][$defaultuserroleid]) or ($isfrontpage and !empty($needed[$cap][$defaultfrontpageroleid]))) { // everybody except the prohibitted - hiding does not matter $unions[] = "SELECT id AS userid FROM {user} @@ -4868,12 +4872,12 @@ function get_users_by_capability($context, $capability, $fields = '', $sort = '' } } if (!$everybody) { - if (count($unions) > 1) { - $unions = implode(' UNION ', $unions); + if ($unions) { + $joins[] = "JOIN (SELECT DISTINCT userid FROM ( ".implode(' UNION ', $unions)." ) us) ra ON ra.userid = u.id"; } else { - $unions = reset($unions); + // only prohibits found - nobody can be matched + $wherecond[] = "1 = 2"; } - $joins[] = "JOIN (SELECT DISTINCT userid FROM ( $unions ) us) ra ON ra.userid = u.id"; } }