我正在通过应用扩展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系统配置,但无法确定是否可以在响应中包含此信息。
答案 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