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

时间:2017-10-10 08:29:59

标签: php moodle moodle-api

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

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

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

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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

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
    }

}