我在moodle中创建一个块,为用户分配特定的系统角色。不确定这样做的最好方法..
我知道您可以从网站管理>分配角色用户>权限>分配系统角色,但我的块需要在自定义表中执行其他操作。我已经完成了在自定义表中创建记录的部分,但此系统角色是唯一剩下的项目......并且不确定如何执行此操作
有人可以指导我如何做到这一点(使用moodle core api(函数)分配系统角色)
或者如果在role_assignments表中添加记录是个好主意..手动使用数据库查询?它会起作用吗?
答案 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
}
}