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

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

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

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

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

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

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


person Joacer    schedule 10.10.2016    source источник


Ответы (2)


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

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 — проверяет, выполняются ли условия встретились
person FMCorz    schedule 11.10.2016

Я последовал вашему совету @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? Это работает, но я не знаю, лучший ли это способ.

Благодарю вас!

person Joacer    schedule 13.10.2016
comment
Да, хотя я бы предложил использовать cm_info для сохранения данных, если это возможно. Также вы заметили, что извлекаете случайный модуль из раздела вашего запроса? - person FMCorz; 14.10.2016
comment
Вы правы, я забыл указать модуль в запросе, спасибо! - person Joacer; 14.10.2016
comment
Я не знаю, как использовать cm_info, я новичок в создании скриптов без пользовательского интерфейса и не знаю, как их использовать. Не могли бы вы привести пример? Спасибо - person Joacer; 14.10.2016
comment
Плохо, похоже, что cm_info не может построить для вас запрос на обновление. - person FMCorz; 14.10.2016
comment
Хорошо, спасибо за помощь!! - person Joacer; 14.10.2016