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

Php 使用moodle核心api函数分配角色,php,moodle,moodle-api,Php,Moodle,Moodle Api,我正在moodle中创建一个块,用于将特定的系统角色分配给用户。不确定这样做的最佳方式 我知道您可以从站点管理>用户>权限>分配系统角色中分配角色,但我的区块需要在自定义表中执行其他操作。。我已经完成了在自定义表中创建记录的部分,但是这个系统角色是剩下的唯一一项..并且不确定如何做 有人能告诉我怎么做吗(使用moodle core api(函数)分配系统角色) 或者,如果在角色分配表中添加记录是个好主意。。手动使用数据库查询?它会起作用吗 $context = context_system::i

我正在moodle中创建一个块,用于将特定的系统角色分配给用户。不确定这样做的最佳方式

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

有人能告诉我怎么做吗(使用moodle core api(函数)分配系统角色)

或者,如果在角色分配表中添加记录是个好主意。。手动使用数据库查询?它会起作用吗

$context = context_system::instance();
role_assign($roleid, $userid, $context->id);
不要直接更新DB表,因为这不会触发角色更改的事件处理程序(或清除相关缓存等)


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

您可以在插件中使用该方法,对于特定课程,该事件将在角色分配给用户时触发

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
    }

}

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

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
    }

}

嗨@davosmith谢谢你。。是的,它很管用。。你能不能也建议一个网站,我可以找到这些类型的核心功能。ThanksHi@davosmith谢谢你。。是的,它很管用。。你能不能也建议一个网站,我可以找到这些类型的核心功能。谢谢你在moodle文档中找到这个方法了吗?角色分配是否接受相同的参数?您在moodle文档中的何处找到此方法?角色分配是否接受相同的参数?