无法正确确定用户的能力
unable to determine capabilities of user properly
我在检查给定用户的能力时遇到了一些问题。我正在尝试根据用户的能力更改用户的图标 - 即能够对论坛进行评分 post。系统权限似乎设置正确,这令人费解。当我以管理员身份进入系统并查看功能概览时,我可以看到学生无法对论坛进行评分 post 但教师可以。
因此,为了基于此更改图标,我这样做:
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';
}
但每个人都得到了学生形象。我错过了什么?我还考虑过检查角色,但这也不起作用。有人 运行 也参与其中吗?
要检查 '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';
}
我在检查给定用户的能力时遇到了一些问题。我正在尝试根据用户的能力更改用户的图标 - 即能够对论坛进行评分 post。系统权限似乎设置正确,这令人费解。当我以管理员身份进入系统并查看功能概览时,我可以看到学生无法对论坛进行评分 post 但教师可以。
因此,为了基于此更改图标,我这样做:
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';
}
但每个人都得到了学生形象。我错过了什么?我还考虑过检查角色,但这也不起作用。有人 运行 也参与其中吗?
要检查 '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';
}