获取OTRS中的customeruser组

时间:2019-07-19 13:01:39

标签: rest otrs

我正在通过应用扩展OTRS,需要获取客户用户所在的组。我想通过与SessionGet-Endpoint(https://doc.otrs.com/doc/api/otrs/6.0/Perl/Kernel/GenericInterface/Operation/Session/SessionGet.pm.html)进行通信来实现此目的

SessionGet的端点返回有关用户的许多信息,但不返回有关他所在的组的信息。我并不是在说可以登录otrs后端但可以登录到userusers的代理。

我正在使用OTRS 6,因为它是docker中唯一可用的一个。我在后端创建了REST端点,并且一切正常。有一个新功能为什么我需要获取有关组的信息。

看看otrs系统配置,但无法确定是否可以在响应中包含此信息。

1 个答案:

答案 0 :(得分:0)

尽管我是一名程序员,但由于...原因,我不想编写perl。

我看了一个文件,该文件处理Crashlytics found an invalid API key: null. Check the Crashlytics plugin to make sure that the application has been added successfully! 处的传入请求,并跟踪了对实际文件的调用,该文件从/opt/otrs/Kernel/GenericInterface/Operation/Session/SessionGet.pm中的数据库中收集了信息。在第169行中,编写了SQL语句,因此我想到我可以扩展它以获取组的信息,因为正如我所说,我不想编写perl ...

此端点的典型响应如下:

/opt/otrs/Kernel/System/AuthSession/DB.pm

一件好事是只插入带有组ID的另一个Value-Key对。 SQL语句仅查询一个表{ "SessionData": [ { "Value": "2", "Key": "ChangeBy" }, { "Value": "2019-06-26 13:43:18", "Key": "ChangeTime" }, { "Value": "2", "Key": "CreateBy" }, { "Value": "2019-06-26 13:43:18", "Key": "CreateTime" }, { "Value": "XXX", "Key": "CustomerCompanyCity" }, { "Value": "", "Key": "CustomerCompanyComment" } ... } ,该表通常被称为$Self->{SessionTable}

我使用以下资源创建了一个SQL语句,该语句用所需的信息扩展了现有的SQL语句。您可以在这里找到它:

otrs.sessions

任何需要获得客户组的用户都可以用提供的代码替换现有代码。至少在我看来,它运作得很好。现在,我得到了预期的键值对:

$DBObject->Prepare(
        SQL => "
            (
                SELECT id, data_key, data_value, serialized FROM $Self->{SessionTable} WHERE session_id = ? ORDER BY id ASC
            ) 
            UNION ALL
            (
                SELECT 
                (
                    SELECT MAX(id) FROM $Self->{SessionTable} WHERE session_id = ?
                ) +1 
                AS id,
                'UserGroupsID' AS data_key,
                (
                    SELECT GROUP_CONCAT(DISTINCT group_id SEPARATOR ', ') 
                    FROM otrs.group_customer_user 
                    WHERE user_id = 
                    (
                        SELECT data_value 
                        FROM $Self->{SessionTable} 
                        WHERE session_id = ? 
                        AND data_key = 'UserID' 
                        ORDER BY id ASC
                    )
                )
                AS data_value,
                0 AS serialized
            )",
        Bind => [ \$Param{SessionID}, \$Param{SessionID}, \$Param{SessionID} ],
    );

我使用了以下资源:

快乐的编码,

Nico