在Moodle中限制资源
问题描述:
我正在尝试使用脚本创建对Moodle课程中某个文件夹或资源内部的访问限制。此限制必须针对用户组,如果您不属于该组,则无法查看现有资源。在Moodle中限制资源
我搜索信息,并有很少的文档,在文档中只提出了如何通过网络link做到这一点。
我知道如何以编程方式从脚本创建组,文件夹和部分,但我无法确定要用于这些限制的表或者要遵循的步骤。
所以,如果有人知道如何做到这一点还是有可能有用的任何实例或文件,这将是有益的。
在此先感谢。
答
将被用于创建用户界面和检查用户是否有权访问你的资源的类分别位于:
availability/condition/group/classes/condition.php
availability/condition/group/classes/frontend.php
相关条件的数据来自JavaScript中的UI格式化为JSON ,然后发送并保存。我的第一个猜测是你需要重新创建JSON结构并将其保存到表格/列course_modules::availability
中。一旦完成,我想你必须从cm_info
中清除缓存,其中availability
数据用于确认当前用户是否可以访问您的资源。
- update_moduleinfo - 保存模块形式提交的数据
- cm_info - 检查的条件是否满足
答
我也跟着你的建议@FMC,我已经做了这个功能给我的脚本,它负责给一个组的一个特定部分的许可
并且这是代码:
/**
* giving permits to a group for a particular section of a course
*
* @param $course course that contains the section to restrict access
* @param $sectionid id of the section to restrict access
* @param $groupid id of the group will have access
* @param $module id of the mdl_module to restrict access
*
*/
function grantPermission($course, $sectionid, $groupid, $module){
global $DB;
$restriction = '{"op":"&","c":[{"type":"group","id":'. $groupid .'}],"showc":[true]}';
$cm= $DB->get_record('course_modules', array('course' => $course , 'section' => $sectionid, 'module' => $module), '*', MUST_EXIST);
$course_module = new stdClass();
$course_module->id = $cm->id;
$course_module->course = $course;
$course_module->section = $sectionid;
$course_module->availability = $restriction;
$res = $DB->update_record('course_modules', $course_module);
if($res)
rebuild_course_cache($course, true);
return $res;
}
你能检查这是你的意思@FMC吗?它有效,但我不知道这是否是最好的方法。
谢谢!
是的,尽管我会建议如果可能的话使用'cm_info'来保存数据。您是否还注意到您从查询中的某个部分获取随机模块? – FMCorz
你说得对,我忘了在查询中指定模块,谢谢! – Joacer
我不知道如何使用cm_info,我有点新创建没有UI的脚本,我不知道如何使用它们,你能举个例子吗?谢谢 – Joacer