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

Posted

技术标签:

【中文标题】通过moodle中的用户ID获取用户角色【英文标题】:get user role by user id in moodle 【发布时间】:2018-03-08 16:19:02 【问题描述】:

我想从用户 ID 中获取用户角色。我在我的代码中使用循环,我想显示除管理员以外的所有用户。我使用了下面的代码,但它不起作用。

$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++;
            
        
    

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

【参考方案2】:

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

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

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

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

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

要获取站点管理员,请使用 get_admins()(或者,如果您真的想访问配置值,请使用 $CFG->siteadmins)。

【讨论】:

我有不同 contextid 的 roleid 1 2 3 4 5 所以你能告诉我,如果 roleid 是 1 = admin ,2 = 表示老师,3 表示特定 contextid 的学生吗? 您需要查看表 mdl_role 以了解每个角色标识的含义。它会因站点而异,具体取决于定义的自定义角色。 通常 3 是编辑老师,4 是非编辑老师,5 是学生,但你永远不应该依赖它并始终检查 mdl_role。

以上是关于通过moodle中的用户ID获取用户角色的主要内容,如果未能解决你的问题,请参考以下文章

如何通过ID获取其他用户信息(用户名,名字)? [Keycloak]

如何通过 id 获取其他用户信息(用户名、名字)? [钥匙斗篷]

OA系统

如果用户在某个角色中,则将术语添加到用户的帖子中

测验尝试页面上每个角色的Moodle块可见性

无法通过颤振应用程序中的用户 ID 获取特定的用户文档