Moodle中具有灵活访问控制的附加网页

时间:2015-04-01 11:37:22

标签: php authorization moodle

在Moodle 2.6中,我创建了一个新的网页external.php并将其复制到服务器上的根文件夹中。该网页包含一个活动(我自己的HTML和JavaScript),必须为明确课程的参与者提供。我现在有3门课程(让他们称之为A,B和C),我希望A和B的参与者可以看到网页的内容,但不是C的参与者可以看到。

到目前为止,我设法使用isloggedin()来限制访问权限并且工作正常,但这只是一种妥协。

所以我的问题是:是否可以限制对A和B课程参与者的访问此网页(它不是课程的一部分而不是一部分),但不是C?

这是我external.php的代码:

<?php
require_once('config.php');
// Open the page if the user is logged in
if (isloggedin()) {
    $PAGE->set_context(get_system_context());
    $PAGE->set_pagelayout('standart');
    $PAGE->set_title("Experimental page");
    $PAGE->set_heading("External");
    $PAGE->set_url($CFG->wwwroot . '/external.php');

    // Adding navbar
    $PAGE->navbar->ignore_active();
    $strHome = "important";
    $PAGE->navbar->add($strHome, new moodle_url('external.php'));

    echo $OUTPUT->header();

    // Variables for the content (html and javascript)
    $jscr = ""; // some code
    $htmlscr = ""; // some code

    // Actual content goes here
    echo $htmlscr;
    echo $jscr;
    echo $OUTPUT->footer();
}
// Else output error message
else {
    echo "<h2>Please log in to procede</h2>";
}
?>

非常感谢!

1 个答案:

答案 0 :(得分:0)

经过几天的文档搜索并询问有经验的人我可以找到解决方案。

我换了:

if (isloggedin()) {
    MY CODE INSIDE
}

使用:

if ((is_enrolled(context_course::instance(18), $USER)) or (is_enrolled(context_course::instance(20), $USER)) or is_siteadmin()) {
    MY CODE INSIDE
}

此代码可让所有注册ID 18 20 的课程的学生以及管理员访问我的代码。 / p>

课程主页打开时,可以在浏览器地址栏中找到课程ID。

我希望它对其他Moodle管理员有所帮助。