在 Moodle 中通过用户 ID 获取用户角色
get user role by user id in moodle
我想从用户 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++;
}
}
}
基本问题是 get_user_roles($context, $userid) 只会为您提供在特定上下文级别分配的角色列表。很少有用户在系统上下文中分配角色,在课程级别分配角色更为常见。这允许用户在不同的课程中扮演不同的角色(一门课程的老师,可能注册为另一门课程的学生)。
如果你想获得一个用户的所有角色,那么你需要做这样的事情:
$roleassignments = $DB->get_records('role_assignments', ['userid' => $user->id]);
然后您可以遍历所有 $roleassignments 并从中提取 'roleid'(或者,您可以使用 $DB->get_fieldset 命令直接提取角色标识)。
另请注意,您应该使用 context_system::instance() 而不是旧的 get_context_instance(CONTEXT_SYSTEM)(除非您使用的是非常旧且不安全的 Moodle 版本)。
要获取站点管理员,请使用 get_admins()(或者,如果您真的想访问配置值,请使用 $CFG->siteadmins)。
如果您想通过用户 ID 获取课程的用户角色,那么此脚本将帮助您。
$context = context_course::instance($COURSE->id);
$roles = get_user_roles($context, $USER->id, true);
$role = key($roles);
$rolename = $roles[$role]->shortname;
我想从用户 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++;
}
}
}
基本问题是 get_user_roles($context, $userid) 只会为您提供在特定上下文级别分配的角色列表。很少有用户在系统上下文中分配角色,在课程级别分配角色更为常见。这允许用户在不同的课程中扮演不同的角色(一门课程的老师,可能注册为另一门课程的学生)。
如果你想获得一个用户的所有角色,那么你需要做这样的事情:
$roleassignments = $DB->get_records('role_assignments', ['userid' => $user->id]);
然后您可以遍历所有 $roleassignments 并从中提取 'roleid'(或者,您可以使用 $DB->get_fieldset 命令直接提取角色标识)。
另请注意,您应该使用 context_system::instance() 而不是旧的 get_context_instance(CONTEXT_SYSTEM)(除非您使用的是非常旧且不安全的 Moodle 版本)。
要获取站点管理员,请使用 get_admins()(或者,如果您真的想访问配置值,请使用 $CFG->siteadmins)。
如果您想通过用户 ID 获取课程的用户角色,那么此脚本将帮助您。
$context = context_course::instance($COURSE->id);
$roles = get_user_roles($context, $USER->id, true);
$role = key($roles);
$rolename = $roles[$role]->shortname;