【问题标题】:assign roles using moodle core api functions使用 Moodle 核心 API 函数分配角色
【发布时间】:2017-10-10 08:29:59
【问题描述】:

我正在 moodle 中创建一个块来为用户分配特定的系统角色。不确定最好的方法..

我知道您可以从站点管理 > 用户 > 权限 > 分配系统角色分配角色,但我的块需要在自定义表中做其他事情。我已经完成了在自定义表中创建记录的部分,但这个系统角色是剩下的唯一物品..不知道该怎么做

有人可以指导我如何做到这一点(使用moodle core api(函数)分配系统角色)

或者如果在 role_assignments 表中添加记录是个好主意.. 手动使用数据库查询?它会起作用吗?

【问题讨论】:

  • 嗨@davosmith 谢谢你.. 是的它有效.. 你能否也建议一个我可以找到这些类型的核心功能的网站。谢谢

标签: php moodle moodle-api


【解决方案1】:
$context = context_system::instance();
role_assign($roleid, $userid, $context->id);

不要直接更新数据库表,因为这不会触发角色更改的事件处理程序(或清除相关缓存等)。

【讨论】:

  • 你在moodle文档的哪里找到这个方法? role_uassigned 是否接受相同的参数?
【解决方案2】:

您可以在插件中创建该方法,该事件将在为特定课程分配给用户的角色时触发。

public static function my_plugin_role_assigned(core\event\role_assigned $enrolment_data){        
    global $DB;

    //strange var name, better change it
    $enrolment_data_data = $enrolment_data->get_data();
    $snapshotid = $enrolment_data->get_data()['other']['id'];        
    $snapshot = $enrolment_data->get_record_snapshot('role_assignments', $snapshotid);

    $roleid = $snapshot->roleid;        
    $rolename = $DB->get_records_sql("SELECT shortname from {role} WHERE id = ?", array($roleid));
    $rolename = array_pop($rolename);
    $rolename = $rolename->shortname;

    if($rolename == 'editingteacher'){
        //My stuff
    }

}

【讨论】:

    猜你喜欢
    • 2014-04-04
    • 2014-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多