代码之家  ›  专栏  ›  技术社区  ›  Rick Knierim

无法正确确定用户的能力

  •  0
  • Rick Knierim  · 技术社区  · 7 年前

    我在检查给定用户的功能时遇到了一些问题。我试图改变一个用户的图标,根据他们的能力-即有能力评价论坛帖子。令人费解的是,系统权限似乎设置正确。当我以管理员的身份进入系统并检查功能概述时,我可以看到学生无法对论坛帖子进行评分,但老师可以。 enter image description here

    因此,为了在此基础上更改图标,我需要:

        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 回复  |  直到 7 年前
        1
  •  1
  •   Adrian Sărmaș    7 年前

    检查 '修改/论坛:费率' 功能,您需要提供类型为的上下文对象 context_模块 :

    // $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';
    }