Moodle core_user_get_users_by_field返回空数组的权限配置咨询
我之前在Moodle生产环境里也碰到过完全一样的问题!调用core_user_get_users_by_field只返回WebService相关用户,核心原因就是权限和服务配置没到位,你可以按下面这几步排查配置:
1. 给WebService角色分配必要的用户查看权限
你需要给WebService所使用的角色(默认是「Web服务」角色)配置以下关键权限:
moodle/user:view:基础的用户查看权限,没有这个连基础用户列表都无法获取moodle/user:viewdetails:允许查看用户的详细信息(比如邮箱、姓名、联系方式等)**moodle/user:viewallusers**:这是重中之重!有了这个权限,角色才能查看站点内所有用户,而不是仅局限于自己所在课程/部门的用户- 如果你的站点存在隐藏用户,还需要
moodle/user:viewhiddendetails来获取这类用户的信息
设置路径:进入「站点管理」→「用户」→「权限」→「定义角色」,找到对应的WebService角色,编辑权限并把上述权限设为「允许」。
2. 确认WebService服务已关联目标函数
要确保core_user_get_users_by_field函数已经被添加到你正在使用的WebService服务中:
- 进入「站点管理」→「插件」→「Web服务」→「管理服务」
- 找到你配置的服务,点击「添加函数」,搜索并添加
core_user_get_users_by_field - 确认该函数在服务的「已添加函数」列表中,且权限处于允许状态
3. 检查用户字段的可见性设置
有些用户配置文件字段(比如手机号、地址)可能被设置为仅对特定角色可见,导致WebService无法获取:
- 进入「站点管理」→「用户」→「账户设置」→「用户配置文件字段」
- 逐个检查你需要获取的字段,在「可见性」选项中确保WebService角色被包含在内(比如设置为「所有用户可见」或者明确勾选WebService角色)
4. 排查用户范围限制
如果你的站点启用了用户隔离(比如按课程/部门分组),WebService用户可能被限制在特定范围内:
- 确保WebService角色的权限上下文是系统级的,而不是仅课程级
- 检查是否有额外的第三方插件(比如用户分组插件)限制了用户可见范围,必要时调整插件配置
快速验证小技巧:用管理员账号调用同一个函数,如果能返回所有用户,那百分百是权限配置问题,按上面的步骤逐一排查就能解决。
内容的提问来源于stack exchange,提问作者Jose Ayram
相关产品推荐
相关产品推荐

