1

我是 Moodle 的新手,我的任务是创建具有课程经理角色的本地插件。在我的系统中,我在特定课程中有大量用户,他们是不同角色的类别。其中一些是与学生绑定的,其余的是经理。就我而言,我收到了客户的请求,要求制作一个本地插件,该插件会针对学生记录生成多个报告。我已经成功制作了插件,但条件是这个插件只能访问那些以经理身份注册课程的人。我正在尝试以下代码,我在下面与您分享,但没有成功。现在只有管理员可以访问本地插件,其余的都是从 Moodle 状态收到的错误消息。

["Sorry, but you do not currently have permissions to do that Project view "]

不知道如何解决。

请指教。

本地/项目/db/access.php

defined('MOODLE_INTERNAL') || die();

$capabilities = array(

    'local/project:view' => array(
        'riskbitmask' => RISK_PERSONAL,
        'captype' => 'read',
        'contextlevel' => CONTEXT_SYSTEM,
        'archetypes' => array(
            'manager' => CAP_ALLOW
        ),
    'local/project:manage' => array(
        'captype' => 'write',
        'contextlevel' => CONTEXT_SYSTEM,
        'archetypes' => array(
            'manager' => CAP_ALLOW
        )
    )
    )
);

本地/项目/header.php

require(dirname(__FILE__).'/../../config.php');
global $DB;
//Get the system context
$url = new moodle_url('/local/project/index.php');

require_login();
require_capability('local/project:view', context_system::instance());
4

2 回答 2

2

我已经成功实现了反对moodle许可的目标。我使用has_capability了带有课程上下文的方法并使用require_capability. 以下程序仅适用于其他人adminmanager直到他们从站点管理处获得完全权限后才能访问。

本地/项目/db/access.php

defined('MOODLE_INTERNAL') || die();

$capabilities = array(

    'local/project:view' => array(
        'riskbitmask' => RISK_SPAM,
        'captype' => 'write',
        'contextlevel' => CONTEXT_COURSE,
        'archetypes' => array(
            'manager' => CAP_ALLOW,
        ),
    )
);

本地/项目/header.php

require(dirname(__FILE__).'/../../config.php');
require_login();

//Get the system context
$context = context_course::instance($course_id);

if (!has_capability('local/project:view', $context)) {
    require_capability('local/project:view', $context);
}
于 2016-04-28T10:53:19.277 回答
1

没有称为“课程经理”的标准 Moodle 角色。

有一个角色叫“经理”(“manager”),另一个叫“课程创建者”(“coursecreator”)。

如果您启用了调试,如果代码有任何问题(例如,如果您没有运行安装/升级过程来创建功能,或者如果您没有在创建功能后增加插件版本号),您可能会收到一些额外的警告消息)。

于 2016-04-21T13:59:55.400 回答