使用 moodle 核心 api 函数分配角色

assign roles using moodle core api functions

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

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

有人可以指导我如何做到这一点(使用 moodle 核心分配系统角色 api(功能))

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

$context = context_system::instance();
role_assign($roleid, $userid, $context->id);

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

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

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
    }

}