【问题标题】:How can I find the user role using user id in moodle如何在moodle中使用用户ID找到用户角色
【发布时间】:2022-01-06 00:11:56
【问题描述】:

我是Moodle 的新手,我有以下代码:

$userDetails = $DB->get_record('user', array('id' => $singleuser->userid)); 
    var_dump($userDetails);
    echo $userDetails->firstname." ".$userDetails->lastname

Moodle 中有用户表的详细信息。如何找到教师、管理员、学生等角色?

这里我有用户 ID $singleuser->userid 。我正在打印用户全名。我需要这个角色,如下所示:

echo $userDetails->firstname." ".$userDetails->lastname.$role.

如何找到角色?请指导我。

Moodle 版本:2.9.1

【问题讨论】:

    标签: php moodle


    【解决方案1】:

    您需要知道您在 Moodle 中的哪个位置申请该角色。 Moodle(通常)没有“学生”或“老师”的全球概念——老师是特定课程的老师,学生是特定课程的学生。

    假设您知道要为其显示角色的课程的 ID,您可以编写以下内容:

    $rolestr = array();
    $context = context_course::instance($courseid);
    $roles = get_user_roles($context, $singleuser->userid);
    foreach ($roles as $role) {
        $rolestr[] = role_get_name($role, $context);
    }
    $rolestr = implode(', ', $rolestr);
    echo "The users roles are {$rolestr} in course {$courseid}";
    

    【讨论】:

    • 成功了。但是在管理员的情况下,它没有获得管理员角色,而是变得空白。谢谢哥们。基本要求满足。需要处理管理问题。
    • is_siteadmin($userid) 将告诉您用户是否是站点管理员(这些处理与角色略有不同,因为站点管理员会否决所有功能检查)。
    【解决方案2】:

    moodle 在 about..etc 等静态页面中获取用户角色

    $context = context_module::instance($cm->id);
    
    $roles = get_user_roles($context, $USER->id, true);
    
    foreach ($roles as $role) { 
    
    }
    

    【讨论】:

      【解决方案3】:

      试试这个,

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

      或者试试这个,使用 get_user_roles 函数,这将返回分配给特定用户的角色列表,这些角色在课程、站点或模块的上下文中

      $context = get_context_instance(CONTEXT_COURSE, $courseid, true);
      $roles = get_user_roles($context, $USER->id, true);
      

      您还可以在模块的上下文中获取角色。

      $context = get_context_instance(CONTEXT_MODULE, $cm->id, true);
      $roles = get_user_roles($context, $USER->id, true);
      

      【讨论】:

      • 除非这是非常旧的 Moodle 版本(2.2 或更低版本),请使用 context_module::instance($cm->id),而不是 get_context_instance(CONTEXT_MODULE, $cm->id)跨度>
      • @davosmith 哥们你能给出一个正确的答案吗?我有用户 ID,我需要找到该用户在该特定课程中的角色!
      • 以上答案不起作用。不推荐使用 get_context_instance() 时出现错误,请改用 context_xxxx::instance()。
      【解决方案4】:

      我没有courseid,是否可以通过添加以下代码获得角色。,

      $context = context_system::instance();
      $roles = get_user_roles($context, $userid, false);
      $role = key($roles);
      $roleid = $roles[$role]->roleid;
      

      【讨论】:

      • 您是在问后续问题,还是应该是对原始问题的回答?请编辑此答案以使其更清晰。
      • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
      猜你喜欢
      • 2018-03-08
      • 1970-01-01
      • 1970-01-01
      • 2019-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多