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

У меня возникли проблемы с проверкой возможностей данного пользователя. Я пытаюсь изменить значок пользователя, основываясь на его возможностях, а именно на возможности оценивать сообщение на форуме. Системные разрешения, кажется, установлены правильно, что вызывает недоумение. Когда я захожу в систему как администратор и проверяю обзор возможностей, я вижу, что ученик не может оценивать сообщение на форуме, а учитель может.

поэтому, чтобы изменить значок на основе этого, я делаю:

    if (!$this->courseid){
        $context = context_user::instance($this->user->id, IGNORE_MISSING);    
    }else{
        $context = context_course::instance($this->courseid, MUST_EXIST);
    }

    if (has_capability('mod/forum:rate', $context, $this->user->id)){
        $filename = 'instructor';
    }else{
         $filename = 'student';
    }

но каждый получает образ студента. Что может быть, что мне не хватает? Я также думал о проверке ролей, но это тоже не работает. Кто-нибудь тоже сталкивался с этим?

1 ответ

Решение

Чтобы проверить возможность 'mod/forum:rate', вам нужно предоставить объект контекста типа context_module:

// $cmid = id from course_modules table
$context = context_module::instance($cmid, MUST_EXIST);

if (has_capability('mod/forum:rate', $context, $userid)){
    $filename = 'instructor';
}else{
     $filename = 'student';
}

Еще один способ проверить роли ученика / учителя в курсе (предполагается, что студентам не разрешено редактировать или обновлять курс):

$context = context_course::instance($courseid, MUST_EXIST);
if(has_capability ('moodle/course:update', $context, $userid)) {
    // Teacher
    $filename = 'instructor';
}
else {
    // Student
    $filename = 'student';
}
Другие вопросы по тегам