MDL-11421 context levels fixed in capability definitions, sorting of caps by name, plug-ins may report used core caps, fixed some risks

This commit is contained in:
skodak
2008-07-24 21:58:05 +00:00
parent 1b5b25b498
commit 3e79b6e37a
25 changed files with 224 additions and 94 deletions
+3
View File
@@ -787,6 +787,9 @@ class block_base {
return true;
}
function get_extra_capabilities() {
return array();
}
}
/**
+1 -1
View File
@@ -19,7 +19,7 @@
function init() {
$this->title = get_string('feedstitle', 'block_rss_client');
$this->version = 2007101509;
$this->version = 2007101511;
$this->cron = 300; /// Set min time between cron executions to 300 secs (5 mins)
}
+4 -4
View File
@@ -36,7 +36,7 @@ $block_rss_client_capabilities = array(
'block/rss_client:createprivatefeeds' => array(
'captype' => 'write',
'contextlevel' => CONTEXT_SYSTEM,
'contextlevel' => CONTEXT_BLOCK,
'legacy' => array(
'teacher' => CAP_ALLOW,
'editingteacher' => CAP_ALLOW,
@@ -49,7 +49,7 @@ $block_rss_client_capabilities = array(
'riskbitmask' => RISK_SPAM,
'captype' => 'write',
'contextlevel' => CONTEXT_SYSTEM,
'contextlevel' => CONTEXT_BLOCK,
'legacy' => array(
'editingteacher' => CAP_ALLOW,
'admin' => CAP_ALLOW
@@ -59,7 +59,7 @@ $block_rss_client_capabilities = array(
'block/rss_client:manageownfeeds' => array(
'captype' => 'write',
'contextlevel' => CONTEXT_SYSTEM,
'contextlevel' => CONTEXT_BLOCK,
'legacy' => array(
'teacher' => CAP_ALLOW,
'editingteacher' => CAP_ALLOW,
@@ -72,7 +72,7 @@ $block_rss_client_capabilities = array(
'riskbitmask' => RISK_SPAM,
'captype' => 'write',
'contextlevel' => CONTEXT_SYSTEM,
'contextlevel' => CONTEXT_BLOCK,
'legacy' => array(
'admin' => CAP_ALLOW
)
+1 -1
View File
@@ -14,7 +14,7 @@ $enrol_authorize_capabilities = array(
'enrol/authorize:uploadcsv' => array(
'riskbitmask' => RISK_XSS,
'captype' => 'write',
'contextlevel' => CONTEXT_USER,
'contextlevel' => CONTEXT_SYSTEM,
'legacy' => array(
'admin' => CAP_ALLOW
)
+1 -1
View File
@@ -1,6 +1,6 @@
<?php // $Id$
$plugin->version = 2006112901;
$plugin->version = 2006112902;
$plugin->requires = 2007101000;
?>
+53 -59
View File
@@ -3399,45 +3399,83 @@ function fetch_context_capabilities($context) {
global $CFG;
$sort = 'ORDER BY contextlevel,component,id'; // To group them sensibly for display
$sort = 'ORDER BY contextlevel,component,name'; // To group them sensibly for display
switch ($context->contextlevel) {
case CONTEXT_SYSTEM: // all
$SQL = "select * from {$CFG->prefix}capabilities";
$SQL = "SELECT *
FROM {$CFG->prefix}capabilities";
break;
case CONTEXT_USER:
$extracaps = array('moodle/grade:viewall');
foreach ($extracaps as $key=>$value) {
$extracaps[$key]= "'$value'";
}
$extra = implode(',', $extracaps);
$SQL = "SELECT *
FROM {$CFG->prefix}capabilities
WHERE contextlevel = ".CONTEXT_USER;
FROM {$CFG->prefix}capabilities
WHERE contextlevel = ".CONTEXT_USER."
OR name IN ($extra)";
break;
case CONTEXT_COURSECAT: // all
$SQL = "select * from {$CFG->prefix}capabilities";
case CONTEXT_COURSECAT: // course category context and bellow
$SQL = "SELECT *
FROM {$CFG->prefix}capabilities
WHERE contextlevel IN (".CONTEXT_COURSECAT.",".CONTEXT_COURSE.",".CONTEXT_MODULE.",".CONTEXT_BLOCK.")";
break;
case CONTEXT_COURSE: // all
$SQL = "select * from {$CFG->prefix}capabilities";
break;
case CONTEXT_GROUP: // group caps
case CONTEXT_COURSE: // course context and bellow
$SQL = "SELECT *
FROM {$CFG->prefix}capabilities
WHERE contextlevel IN (".CONTEXT_COURSE.",".CONTEXT_MODULE.",".CONTEXT_BLOCK.")";
break;
case CONTEXT_MODULE: // mod caps
$cm = get_record('course_modules', 'id', $context->instanceid);
$module = get_record('modules', 'id', $cm->module);
$SQL = "select * from {$CFG->prefix}capabilities where contextlevel = ".CONTEXT_MODULE."
and component = 'mod/$module->name'";
$extra = "";
$modfile = "$CFG->dirroot/mod/$module->name/lib.php";
if (file_exists($modfile)) {
include_once($modfile);
$modfunction = $module->name.'_get_extra_capabilities';
if (function_exists($modfunction)) {
if ($extracaps = $modfunction()) {
foreach ($extracaps as $key=>$value) {
$extracaps[$key]= "'$value'";
}
$extra = implode(',', $extracaps);
$extra = "OR name IN ($extra)";
}
}
}
$SQL = "SELECT *
FROM {$CFG->prefix}capabilities
WHERE contextlevel = ".CONTEXT_MODULE."
AND component = 'mod/$module->name'
$extra";
break;
case CONTEXT_BLOCK: // block caps
$cb = get_record('block_instance', 'id', $context->instanceid);
$block = get_record('block', 'id', $cb->blockid);
$SQL = "select * from {$CFG->prefix}capabilities where (contextlevel = ".CONTEXT_BLOCK." AND component = 'moodle')
OR (component = 'block/$block->name')";
$extra = "";
if ($blockinstance = block_instance($block->name)) {
if ($extracaps = $blockinstance->get_extra_capabilities()) {
$extra = implode(',', $extracaps);
$extra = "OR name IN ($extra)";
}
}
$SQL = "SELECT *
FROM {$CFG->prefix}capabilities
WHERE (contextlevel = ".CONTEXT_BLOCK."
AND component = 'block/$block->name')
$extra";
break;
default:
@@ -3448,50 +3486,6 @@ function fetch_context_capabilities($context) {
$records = array();
}
/// the rest of code is a bit hacky, think twice before modifying it :-(
// special sorting of core system capabiltites and enrollments
if (in_array($context->contextlevel, array(CONTEXT_SYSTEM, CONTEXT_COURSECAT, CONTEXT_COURSE))) {
$first = array();
foreach ($records as $key=>$record) {
if (preg_match('|^moodle/|', $record->name) and $record->contextlevel == CONTEXT_SYSTEM) {
$first[$key] = $record;
unset($records[$key]);
} else if (count($first)){
break;
}
}
if (count($first)) {
$records = $first + $records; // merge the two arrays keeping the keys
}
} else {
$contextindependentcaps = fetch_context_independent_capabilities();
$records = array_merge($contextindependentcaps, $records);
}
return $records;
}
/**
* Gets the context-independent capabilities that should be overrridable in
* any context.
* @return array of capability records from the capabilities table.
*/
function fetch_context_independent_capabilities() {
//only CONTEXT_SYSTEM capabilities here or it will break the hack in fetch_context_capabilities()
$contextindependentcaps = array(
'moodle/site:accessallgroups'
);
$records = array();
foreach ($contextindependentcaps as $capname) {
$record = get_record('capabilities', 'name', $capname);
array_push($records, $record);
}
return $records;
}
+26 -26
View File
@@ -35,7 +35,7 @@ $moodle_capabilities = array(
'moodle/site:doanything' => array(
'riskbitmask' => RISK_SPAM | RISK_PERSONAL | RISK_XSS | RISK_CONFIG,
'riskbitmask' => RISK_SPAM | RISK_PERSONAL | RISK_XSS | RISK_CONFIG | RISK_DATALOSS,
'captype' => 'admin',
'contextlevel' => CONTEXT_SYSTEM
@@ -91,7 +91,7 @@ $moodle_capabilities = array(
'moodle/legacy:admin' => array(
'riskbitmask' => RISK_SPAM | RISK_PERSONAL | RISK_XSS | RISK_CONFIG,
'riskbitmask' => RISK_SPAM | RISK_PERSONAL | RISK_XSS | RISK_CONFIG | RISK_DATALOSS,
'captype' => 'legacy',
'contextlevel' => CONTEXT_SYSTEM
@@ -100,7 +100,7 @@ $moodle_capabilities = array(
'moodle/site:config' => array(
'riskbitmask' => RISK_SPAM | RISK_PERSONAL | RISK_XSS | RISK_CONFIG,
'riskbitmask' => RISK_SPAM | RISK_PERSONAL | RISK_XSS | RISK_CONFIG | RISK_DATALOSS,
'captype' => 'write',
'contextlevel' => CONTEXT_SYSTEM,
@@ -149,7 +149,7 @@ $moodle_capabilities = array(
'riskbitmask' => RISK_SPAM | RISK_PERSONAL | RISK_XSS,
'captype' => 'write',
'contextlevel' => CONTEXT_SYSTEM,
'contextlevel' => CONTEXT_COURSE,
'legacy' => array(
'editingteacher' => CAP_ALLOW,
'admin' => CAP_ALLOW
@@ -161,7 +161,7 @@ $moodle_capabilities = array(
'riskbitmask' => RISK_SPAM | RISK_PERSONAL | RISK_XSS,
'captype' => 'write',
'contextlevel' => CONTEXT_SYSTEM,
'contextlevel' => CONTEXT_COURSE,
'legacy' => array(
'editingteacher' => CAP_ALLOW,
'admin' => CAP_ALLOW
@@ -173,7 +173,7 @@ $moodle_capabilities = array(
'riskbitmask' => RISK_SPAM | RISK_PERSONAL | RISK_XSS,
'captype' => 'write',
'contextlevel' => CONTEXT_SYSTEM,
'contextlevel' => CONTEXT_COURSE,
'legacy' => array(
'editingteacher' => CAP_ALLOW,
'admin' => CAP_ALLOW
@@ -185,7 +185,7 @@ $moodle_capabilities = array(
'riskbitmask' => RISK_SPAM | RISK_XSS,
'captype' => 'write',
'contextlevel' => CONTEXT_SYSTEM,
'contextlevel' => CONTEXT_BLOCK,
'legacy' => array(
'editingteacher' => CAP_ALLOW,
'admin' => CAP_ALLOW
@@ -195,7 +195,7 @@ $moodle_capabilities = array(
'moodle/site:accessallgroups' => array(
'captype' => 'read',
'contextlevel' => CONTEXT_SYSTEM,
'contextlevel' => CONTEXT_COURSE,
'legacy' => array(
'teacher' => CAP_ALLOW,
'editingteacher' => CAP_ALLOW,
@@ -206,7 +206,7 @@ $moodle_capabilities = array(
'moodle/site:viewfullnames' => array(
'captype' => 'read',
'contextlevel' => CONTEXT_SYSTEM,
'contextlevel' => CONTEXT_COURSE,
'legacy' => array(
'teacher' => CAP_ALLOW,
'editingteacher' => CAP_ALLOW,
@@ -219,7 +219,7 @@ $moodle_capabilities = array(
'riskbitmask' => RISK_PERSONAL,
'captype' => 'read',
'contextlevel' => CONTEXT_SYSTEM,
'contextlevel' => CONTEXT_COURSE,
'legacy' => array(
'teacher' => CAP_ALLOW,
'editingteacher' => CAP_ALLOW,
@@ -232,7 +232,7 @@ $moodle_capabilities = array(
'riskbitmask' => RISK_XSS,
'captype' => 'write',
'contextlevel' => CONTEXT_SYSTEM,
'contextlevel' => CONTEXT_COURSE,
'legacy' => array(
'editingteacher' => CAP_ALLOW,
'admin' => CAP_ALLOW
@@ -309,7 +309,7 @@ $moodle_capabilities = array(
'moodle/user:viewdetails' => array(
'captype' => 'read',
'contextlevel' => CONTEXT_SYSTEM,
'contextlevel' => CONTEXT_COURSE,
'legacy' => array(
'guest' => CAP_ALLOW,
'student' => CAP_ALLOW,
@@ -324,7 +324,7 @@ $moodle_capabilities = array(
'riskbitmask' => RISK_PERSONAL,
'captype' => 'read',
'contextlevel' => CONTEXT_SYSTEM,
'contextlevel' => CONTEXT_COURSE,
'legacy' => array(
'teacher' => CAP_ALLOW,
'editingteacher' => CAP_ALLOW,
@@ -348,7 +348,7 @@ $moodle_capabilities = array(
'riskbitmask' => RISK_SPAM | RISK_PERSONAL | RISK_XSS,
'captype' => 'write',
'contextlevel' => CONTEXT_SYSTEM,
'contextlevel' => CONTEXT_COURSE,
'legacy' => array(
'editingteacher' => CAP_ALLOW,
'admin' => CAP_ALLOW
@@ -360,7 +360,7 @@ $moodle_capabilities = array(
'riskbitmask' => RISK_SPAM | RISK_PERSONAL | RISK_XSS,
'captype' => 'write',
'contextlevel' => CONTEXT_SYSTEM,
'contextlevel' => CONTEXT_COURSE,
'legacy' => array(
'admin' => CAP_ALLOW
)
@@ -371,7 +371,7 @@ $moodle_capabilities = array(
'riskbitmask' => RISK_SPAM,
'captype' => 'write',
'contextlevel' => CONTEXT_SYSTEM,
'contextlevel' => CONTEXT_COURSE,
'legacy' => array(
'editingteacher' => CAP_ALLOW
)
@@ -391,7 +391,7 @@ $moodle_capabilities = array(
'moodle/role:unassignself' => array(
'captype' => 'write',
'contextlevel' => CONTEXT_SYSTEM,
'contextlevel' => CONTEXT_COURSE,
'legacy' => array(
'student' => (empty($CFG->allowunenrol)) ? CAP_INHERIT : CAP_ALLOW,
'teacher' => CAP_ALLOW,
@@ -404,7 +404,7 @@ $moodle_capabilities = array(
'moodle/role:viewhiddenassigns' => array(
'captype' => 'read',
'contextlevel' => CONTEXT_SYSTEM,
'contextlevel' => CONTEXT_COURSE,
'legacy' => array(
'teacher' => CAP_ALLOW,
'editingteacher' => CAP_ALLOW,
@@ -417,7 +417,7 @@ $moodle_capabilities = array(
'riskbitmask' => RISK_XSS | RISK_PERSONAL,
'captype' => 'read',
'contextlevel' => CONTEXT_SYSTEM,
'contextlevel' => CONTEXT_COURSE,
'legacy' => array(
'editingteacher' => CAP_ALLOW,
'admin' => CAP_ALLOW
@@ -685,7 +685,7 @@ $moodle_capabilities = array(
'moodle/blog:view' => array(
'captype' => 'read',
'contextlevel' => CONTEXT_SYSTEM,
'contextlevel' => CONTEXT_COURSE,
'legacy' => array(
'guest' => CAP_ALLOW,
'user' => CAP_ALLOW,
@@ -713,7 +713,7 @@ $moodle_capabilities = array(
'riskbitmask' => RISK_SPAM,
'captype' => 'write',
'contextlevel' => CONTEXT_SYSTEM,
'contextlevel' => CONTEXT_COURSE,
'legacy' => array(
'teacher' => CAP_ALLOW,
'editingteacher' => CAP_ALLOW,
@@ -726,7 +726,7 @@ $moodle_capabilities = array(
'riskbitmask' => RISK_SPAM,
'captype' => 'write',
'contextlevel' => CONTEXT_SYSTEM,
'contextlevel' => CONTEXT_COURSE,
'legacy' => array(
'user' => CAP_ALLOW,
'admin' => CAP_ALLOW
@@ -738,7 +738,7 @@ $moodle_capabilities = array(
'riskbitmask' => RISK_SPAM,
'captype' => 'write',
'contextlevel' => CONTEXT_SYSTEM,
'contextlevel' => CONTEXT_COURSE,
'legacy' => array(
'teacher' => CAP_ALLOW,
'editingteacher' => CAP_ALLOW,
@@ -751,7 +751,7 @@ $moodle_capabilities = array(
'riskbitmask' => RISK_SPAM,
'captype' => 'write',
'contextlevel' => CONTEXT_SYSTEM,
'contextlevel' => CONTEXT_COURSE,
'legacy' => array(
'teacher' => CAP_ALLOW,
'editingteacher' => CAP_ALLOW,
@@ -1134,7 +1134,7 @@ $moodle_capabilities = array(
'moodle/notes:view' => array(
'captype' => 'read',
'contextlevel' => CONTEXT_SYSTEM,
'contextlevel' => CONTEXT_COURSE,
'legacy' => array(
'teacher' => CAP_ALLOW,
'editingteacher' => CAP_ALLOW,
@@ -1146,7 +1146,7 @@ $moodle_capabilities = array(
'riskbitmask' => RISK_SPAM,
'captype' => 'write',
'contextlevel' => CONTEXT_SYSTEM,
'contextlevel' => CONTEXT_COURSE,
'legacy' => array(
'teacher' => CAP_ALLOW,
'editingteacher' => CAP_ALLOW,
+7
View File
@@ -3056,4 +3056,11 @@ function assignment_reset_course_form_defaults($course) {
return array('reset_assignment_submissions'=>1);
}
/**
* Returns all other caps used in module
*/
function assignment_get_extra_capabilities() {
return array('moodle/site:accessallgroups', 'moodle/site:viewfullnames');
}
?>
+7
View File
@@ -792,4 +792,11 @@ function chat_reset_userdata($data) {
return $status;
}
/**
* Returns all other caps used in module
*/
function chat_get_extra_capabilities() {
return array('moodle/site:accessallgroups', 'moodle/site:viewfullnames');
}
?>
+8 -1
View File
@@ -733,6 +733,13 @@ function choice_get_response_data($choice, $cm, $groupmode) {
}
return $allresponses;
}
/**
* Returns all other caps used in module
*/
function chice_get_extra_capabilities() {
return array('moodle/site:accessallgroups');
}
?>
+8
View File
@@ -2087,4 +2087,12 @@ function data_reset_userdata($data) {
}
return $status;
}
/**
* Returns all other caps used in module
*/
function data_get_extra_capabilities() {
return array('moodle/site:accessallgroups', 'moodle/site:viewfullnames');
}
?>
+7
View File
@@ -746,4 +746,11 @@ function exercise_get_post_actions() {
return array('assess','delete','grade','open','set up','submit');
}
/**
* Returns all other caps used in module
*/
function exercise_get_extra_capabilities() {
return array('moodle/site:accessallgroups');
}
?>
+7
View File
@@ -6690,4 +6690,11 @@ function forum_get_open_modes() {
'0' => get_string('openmode0', 'forum') );
}
/**
* Returns all other caps used in module
*/
function forum_get_extra_capabilities() {
return array('moodle/site:accessallgroups', 'moodle/site:viewfullnames', 'moodle/site:trustcontent');
}
?>
+7
View File
@@ -2330,4 +2330,11 @@ function glossary_reset_userdata($data) {
return $status;
}
/**
* Returns all other caps used in module
*/
function glossary_get_extra_capabilities() {
return array('moodle/site:accessallgroups', 'moodle/site:viewfullnames', 'moodle/site:trustcontent');
}
?>
+7
View File
@@ -2603,4 +2603,11 @@ END_OF_SCRIPT;
}
}
/**
* Returns all other caps used in module
*/
function hotpot_get_extra_capabilities() {
return array('moodle/site:accessallgroups');
}
?>
+7
View File
@@ -547,4 +547,11 @@ function journal_get_post_actions() {
return array('add entry','update entry','update feedback');
}
/**
* Returns all other caps used in module
*/
function journal_get_extra_capabilities() {
return array('moodle/site:accessallgroups');
}
?>
+7
View File
@@ -123,4 +123,11 @@ function label_reset_userdata($data) {
return array();
}
/**
* Returns all other caps used in module
*/
function lable_get_extra_capabilities() {
return array('moodle/site:accessallgroups');
}
?>
+7
View File
@@ -656,4 +656,11 @@ function lesson_reset_userdata($data) {
return $status;
}
/**
* Returns all other caps used in module
*/
function lesson_get_extra_capabilities() {
return array('moodle/site:accessallgroups');
}
?>
+20
View File
@@ -1174,4 +1174,24 @@ function quiz_num_attempt_summary($quiz, $cm, $returnzero = false, $currentgroup
}
return '';
}
/**
* Returns all other caps used in module
*/
function quiz_get_extra_capabilities() {
return array(
'moodle/site:accessallgroups',
'moodle/question:add',
'moodle/question:editmine',
'moodle/question:editall',
'moodle/question:viewmine',
'moodle/question:viewall',
'moodle/question:usemine',
'moodle/question:useall',
'moodle/question:movemine',
'moodle/question:moveall',
'moodle/question:managecategory',
);
}
?>
+8
View File
@@ -674,4 +674,12 @@ function resource_delete_warning($course, $files) {
function resource_reset_userdata($data) {
return array();
}
/**
* Returns all other caps used in module
*/
function resource_get_extra_capabilities() {
return array('moodle/site:accessallgroups');
}
?>
+7
View File
@@ -627,4 +627,11 @@ function scorm_reset_userdata($data) {
return $status;
}
/**
* Returns all other caps used in module
*/
function scorm_get_extra_capabilities() {
return array('moodle/site:accessallgroups');
}
?>
+7
View File
@@ -575,4 +575,11 @@ function survey_reset_userdata($data) {
return $status;
}
/**
* Returns all other caps used in module
*/
function survey_get_extra_capabilities() {
return array('moodle/site:accessallgroups');
}
?>
+6
View File
@@ -1739,5 +1739,11 @@ function wiki_release_lock($wikiid,$pagename) {
}
}
/**
* Returns all other caps used in module
*/
function wiki_get_extra_capabilities() {
return array('moodle/site:accessallgroups', 'moodle/site:viewfullnames');
}
?>
+7
View File
@@ -1854,4 +1854,11 @@ function workshop_get_post_actions() {
return array('agree','assess','comment','grade','newattachment','removeattachments','resubmit','submit');
}
/**
* Returns all other caps used in module
*/
function workshop_get_extra_capabilities() {
return array('moodle/site:accessallgroups', 'moodle/site:viewfullnames');
}
?>
+1 -1
View File
@@ -6,7 +6,7 @@
// This is compared against the values stored in the database to determine
// whether upgrades should be performed (see lib/db/*.php)
$version = 2007101520.01; // YYYYMMDD = date of the 1.9 branch (don't change)
$version = 2007101520.02; // YYYYMMDD = date of the 1.9 branch (don't change)
// X = release number 1.9.[0,1,2,3...]
// Y.YY = micro-increments between releases