1

我正在尝试使用Script创建对Moodle课程中某个部分内的文件夹或资源的访问限制。此限制必须针对用户组,如果您不属于该组,您将看不到现有资源。

我想要以编程方式执行的操作如下: 在此处输入图像描述

我搜索了信息并且文档很少,在文档中仅通过网络链接介绍了如何做到这一点。

我知道如何从脚本以编程方式创建组、文件夹和部分,但我无法确定要用于这些限制的表或要遵循的步骤。

因此,如果有人知道如何做或有任何可能有用的示例或文档,那将会很有帮助。

提前致谢。

4

2 回答 2

1

将用于创建 UI 并检查用户是否有权访问您的资源的类位于:

availability/condition/group/classes/condition.php
availability/condition/group/classes/frontend.php

与条件相关的数据在 Javascript 中从 UI 格式化为 JSON,然后发送并保存。我的第一个猜测是您需要重新创建 JSON 结构并将其保存到 table/columncourse_modules::availability中。完成后,我认为您必须从cm_info使用availability数据的位置清除缓存,以确认当前用户是否可以访问您的资源。

于 2016-10-11T09:30:25.647 回答
0

我听从了@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?它有效,但我不知道这是否是最好的方法。

谢谢!

于 2016-10-13T08:46:51.517 回答