2017-09-27 12 views
1

사용자 ID에서 사용자 역할을 가져오고 싶습니다. 나는 내 코드에서 admin을 제외한 모든 사용자를 표시하려는 루프를 사용하고 있습니다. 나는 아래 코드를 사용했지만 작동하지 않는다.사용자 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

기본 문제는 get_user_roles ($ context, $ userid)가 특정 컨텍스트 수준에서만 할당 된 역할 목록을 가져 오는 것입니다. 매우 적은 수의 사용자가 시스템 컨텍스트에서 역할을 할당받으며, 코스 레벨에서 역할을 할당하는 것이 훨씬 더 일반적입니다. 이를 통해 사용자는 다른 과목에서 다른 역할을 할 수 있습니다 (한 강좌의 교사는 다른 강좌의 학생으로 등록 될 수 있음). 그런 다음 모든 $ roleassignments을 통해 루프가 '역할 ID를 추출 할 수

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

:

당신이 사용자의 모든 역할을 얻고 싶다면

는, 당신은 이런 일을 할 필요 해요 '(또는 $ DB-> get_fieldset 명령을 사용하여 직접 roleids를 추출 할 수 있습니다).

이전의 get_context_instance (CONTEXT_SYSTEM) 대신 context_system :: instance()를 사용해야합니다 (매우 오래되고 안전하지 않은 무들 버전을 사용하지 않는 경우).

사이트 관리자를 얻으려면 get_admins()를 사용하십시오 (또는 설정 값에 실제로 액세스하려면 $ CFG-> siteadmins를 사용하십시오).