【问题标题】:Restricting a resource in Moodle限制 Moodle 中的资源
【发布时间】:2016-10-14 18:39:40
【问题描述】:

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

我想要以编程方式执行的操作如下:

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

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

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

提前致谢。

【问题讨论】:

    标签: moodle moodle-api


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      我听从了您@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 来保存数据。您是否还注意到您从查询中的某个部分获取了一个随机模块?
      • 你说得对,我忘了在查询中指定模块,谢谢!
      • 我不知道如何使用cm_info,我是一个没有UI的新创建脚本,我不知道如何使用它们,你能举个例子吗?谢谢
      • 我的错,cm_info 似乎无法为您构建更新查询。
      • 好的,谢谢你的帮助!!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-09
      • 2022-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多