Ограничение ресурса в Moodle

#moodle #moodle-api

#moodle #moodle-api

Вопрос:

Я пытаюсь создать ограничения доступа к папке или ресурсу внутри раздела в курсе Moodle с помощью скрипта. Это ограничение должно быть для групп пользователей, и если вы не принадлежите к этой группе, вы не сможете видеть существующие ресурсы.

Программная операция, которую я хочу выполнить, заключается в следующем: введите описание изображения здесь

Я искал информацию, и документации очень мало, в документации указано только, как это сделать по веб-ссылке.

Я знаю, как создавать группы, папки и разделы программно из скрипта, но я не могу определить таблицы, которые будут использоваться для этих ограничений, или какие шаги необходимо выполнить.

Так что, если кто-нибудь знает, как это сделать, или у него есть какие-либо примеры или документация, которые могут быть полезны, это было бы полезно.

Заранее спасибо.

Ответ №1:

Классы, которые будут использоваться для создания пользовательского интерфейса и проверки того, имеет ли пользователь доступ к вашему ресурсу, расположены по адресу:

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

Данные, относящиеся к условиям, форматируются в формате JSON из пользовательского интерфейса в Javascript, затем отправляются и сохраняются. Мое первое предположение заключается в том, что вам нужно воссоздать структуру JSON и сохранить ее в таблице / столбце course_modules::availability . Как только это будет сделано, я думаю, вам придется очистить кеш, из cm_info которого availability используются данные, чтобы подтвердить, может ли текущий пользователь получить доступ к вашему ресурсу.

  • update_moduleinfo — сохраняет отправленные данные формы модуля
  • cm_info — проверяет, выполняются ли условия

Ответ №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":"amp;","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? Это работает, но я не знаю, лучший ли это способ.

Спасибо!

Комментарии:

1. Да, хотя я бы предложил использовать cm_info для сохранения данных, если это возможно. Также вы заметили, что вы извлекаете случайный модуль из раздела в своем запросе?

2. Вы правы, я забыл указать модуль в запросе, спасибо!

3. Я не знаю, как использовать cm_info, я немного новичок в создании сценариев без пользовательского интерфейса, и я не знаю, как их использовать, можете ли вы привести мне какой-нибудь пример? Спасибо

4. Мой плохой, похоже, это не cm_info может создать запрос на обновление для вас.

5. Хорошо, спасибо за помощь!!