通过moodle中的用户ID获取用户角色

时间:2017-09-27 08:50:53

标签: sql moodle roles user-roles moodle-api

我想从用户ID获取用户角色。我在我的代码中使用循环,我想显示除admin之外的所有用户。我使用下面的代码,但它没有工作。

$context = get_context_instance (CONTEXT_SYSTEM);
$roles = get_user_roles($context, $USER->id, false);
$role = key($roles);
$roleid = $roles[$role]->roleid;

它提供了我的空白数组,就像截图一样。也低于我的所有代码。 https://prnt.sc/gq8p12

$ allUsers = $ DB-> get_records(' user');

    $SQL = "SELECT * FROM `".$CFG->prefix."config` WHERE `name` LIKE 'siteadmins'";
    $getSiteAdmins = $DB->get_record_sql($SQL);
    $explodeAdminIds = explode(',', $getSiteAdmins->value);    
    $context = get_context_instance (CONTEXT_SYSTEM);       

    if(!empty($allUsers))
    {
        foreach ($allUsers as $allUser) 
        {
            if(!in_array($allUser->id, $explodeAdminIds))
            {
                $roles = get_user_roles($context, $allUser->id, false);
                $role = key($roles);
                $roleid = $roles[$role]->roleid;

                echo 'USER ID -- '.$allUser->id.' >>> ';
                print_r($roles); echo '<br>';

                $name = '<a href="' . $CFG->wwwroot . '/user/profile.php?id='.$allUser->id.'&mid=4">'.$allUser->id.'_'.$allUser->firstname.' '.$allUser->lastname.'</a>';
                $confirmed = ($allUser->confirmed == 1) ? 'Active' : 'In-active';
                $table->data[] = array(
                    $i,
                    $name,
                    'Team Name',
                    $allUser->email,
                    $allUser->phone1,
                    'Role',
                    $confirmed,
                    //empty($coachusrarr)?'--':implode(',',$coachusrarr),   
                    //empty($tmpleaderarr)?'--':implode(',',$tmpleaderarr),   
                    //$coach,
                );
                $i++;
            }
        }
    }

2 个答案:

答案 0 :(得分:1)

基本问题是get_user_roles($ context,$ userid)只会获得在该特定上下文级别分配的角色列表。很少有用户在系统上下文中分配角色,在课程级别分配角色更为常见。这允许用户在不同的课程中担任不同的角色(一门课程的教师,可能在另一门课程上注册为学生)。

如果您想获得用户的所有角色,那么您将需要执行以下操作:

$roleassignments = $DB->get_records('role_assignments', ['userid' => $user->id]);

然后,您可以遍历所有$ roleassignments并从中提取'roleid'(或者,您可以使用$ DB-&gt; get_fieldset命令直接提取角色)。

另请注意,您应该使用context_system :: instance()而不是旧的get_context_instance(CONTEXT_SYSTEM)(除非您使用的是非常古老且不安全的Moodle版本)。

要获取网站管理员,请使用get_admins()(或者,如果您确实要访问配置值,请使用$ CFG-&gt; siteadmins)。

答案 1 :(得分:0)

如果您想通过用户 ID 获取课程的用户角色,那么此脚本将为您提供帮助。

$context = context_course::instance($COURSE->id);
$roles = get_user_roles($context, $USER->id, true);
$role = key($roles);
$rolename = $roles[$role]->shortname;