2012-05-14 3 views
8

Как получить контекст/роль входа в систему пользователя в moodle? Я пытаюсь реализовать блок контекстно-зависимых. Блок будет предлагать правильные викторины своим пользователям на основе их настроений.Moodle как узнать роль зарегистрированного пользователя

Роль может быть учителем, учеником, помощником учителя или администратором. Я уже нашел функции get_context_instance() & has_compatibility(), но я не знаю, как их использовать для этой цели.

+0

Роли и контексты являются одним из самых сложных понятий в Moodle, но короткая версия является контекст в целом применяется к одному курсу, отдельной категории или всему сайту. Роль предоставляется в этом контексте и назначает возможности пользователю в этом контексте. –

ответ

3

В moodle роли основаны на контексте. Я думаю, что этот фрагмент кода будет вам полезен.

глобальный $ COURSE, $ USER;

$context = get_context_instance(CONTEXT_COURSE,$COURSE->id); 

if (has_capability('moodle/legacy:student', $context, $USER->id, false)) { 
echo "Student"; 
} 

if (has_capability('moodle/legacy:editingteacher', $context, $USER->id, false)) { 
echo "is Teacher<br/>"; 
} 
if (has_capability('moodle/legacy:admin', $context, $USER->id, false)) { 
echo "is ADMIN<br/>"; 
} 

Имейте в виду, что это вполне возможно (но маловероятно), чтобы иметь сайт Moodle без Студента по умолчанию и роли учителя

+0

Этот код хорош, но есть проблема. Поскольку я не в курсе/курсе, предположим, что я на главной странице, и я хочу узнать, в чем роль. это не сработает – Ehsan

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

это работает для меня

6

В Moodle 2. x вы можете использовать функцию 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); 
1

Вы можете проверить, какие роли у пользователя следующим образом:

if (user_has_role_assignment($user1->id, $roleid)) 
    echo "User is a teacher in some course"; 

Роль идентификатор учителя, как правило, 3, и роль идентификатор студента обычно 5, но вы можете проверить это, глядя на таблицу в Администрировании сайта -> Пользователи -> Разрешения -> Определить роли

Обратите внимание, что один пользователь может иметь разные роли. Функция user_has_role_assignment, похоже, проверяет, какие роли у него есть в системе.

8

проверки пользователь является администратором или не

$admins = get_admins(); 
$isadmin = false; 
foreach($admins as $admin) { 
    if ($USER->id == $admin->id) { 
     $isadmin = true; 
     break; 
    } 
} 

использовать результат для функций

if ($isadmin) { 
    echo "you are an admin";  
} else { 
    echo "you are not an amidn"; 
} 
Смежные вопросы