【问题标题】:Local Plugin permission issue not apply on course manager specifically - Moodle本地插件权限问题不适用于课程管理器 - Moodle
【发布时间】:2016-04-21 13:44:32
【问题描述】:

我是 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());

【问题讨论】:

    标签: php permissions moodle capability


    【解决方案1】:

    我已经成功实现了针对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);
    }
    

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 我还有一个解决方案,但它的自定义我直接使用数据库检查了用户权限,它为我工作,但问题是这种方法没有为我提供错误功能,它显示像 moodle 错误消息。你能告诉我如何显示moodle使用的相同错误消息if(count($resposne) == 0){ echo 'Sorry, but you do not currently have permissions to do that Project'; exit(); }
      • 如果您必须手动检查数据库中的权限,那么您的能力定义或能力检查有问题。在我为 Moodle 开发的这些年里,require_capability() 和 has_capability() 已经为我正确工作了数千次。
      • 对于我的情况,我如何使用 require_capability() 和 has_capability() 的功能......没有提供解决方案方面的 moodle
      猜你喜欢
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 2019-03-31
      • 1970-01-01
      • 2011-06-12
      • 2010-11-10
      • 2012-09-23
      相关资源
      最近更新 更多