通过Moodle Web服务获取用户角色

时间:2019-07-04 09:38:30

标签: api web-services moodle

我一直在尝试找到一种通过Moodle网络服务API重新获得用户角色的方法。

我知道没有端点可以执行此操作,但是由于我无权访问客户端的数据库,因此无法直接从数据库中检索它们。

还有另一种方法吗?

1 个答案:

答案 0 :(得分:0)

您可以按照以下方式编写解决方案:

  1. 使用通常的样板代码(version.php等)创建准系统插件,例如本地插件。您可以使用此其他插件来生成样板代码:https://moodle.org/plugins/tool_pluginskel
  2. 在'db / services.php'中注册一个新的外部函数,并将其公开到新的或现有的服务中。此处的文档:https://docs.moodle.org/dev/Adding_a_web_service_to_a_plugin和此处https://docs.moodle.org/dev/Web_services_API。例如:
$functions = [
    'local_myplugin_get_user_roles' => [
        'classname' => external::class,
        'methodname' => 'get_user_roles',
        'description' => 'gets user roles',
        'type' => 'read',
    ],
];
$services = [
    'My services' => [
        'functions' => [
            'local_myplugin_get_user_roles',
        ],
        'enabled' => 1,
        'restrictedusers' => 0,
        'shortname' => 'local_myplugin',
        'downloadfiles' => 0,
        'uploadfiles' => 0,
    ],
];
  1. 为您的插件编写外部类(例如,在external.php文件中)(在您之前编写的函数定义中引用)。在此类中,为定义的外部函数(例如,将为给定用户ID的用户获取角色)的代码编写,包括输入和输出处理程序。此处的示例:https://docs.moodle.org/dev/External_functions_API#externallib.php
  2. 在外部函数中,要获取给定上下文,用户ID等的用户角色列表,可以使用全局帮助器get_user_roles。不要忘记在此外部函数中编写验证输入参数等所需的代码。
  3. 要将适当的新服务和外部功能公开给外部系统,您需要以Moodle管理员的身份遵循以下设置准则:YOUR_MOODLE_INSTANCE_URL / admin / settings.php?section = webservicesoverview。最后,您将生成一个用户(Web服务使用者)和一个令牌,您可以在外部系统中设置该令牌以使用Moodle服务。

快乐的编码。