<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>iTopCN – 管理员指南</title><link>/docs/admin/</link><description>Recent content in 管理员指南 on iTopCN</description><generator>Hugo -- gohugo.io</generator><language>zh</language><lastBuildDate>Thu, 26 Jun 2025 00:00:00 +0000</lastBuildDate><atom:link href="/docs/admin/index.xml" rel="self" type="application/rss+xml"/><item><title>Docs: 用户账号和配置文件</title><link>/docs/admin/01-managing_user_accounts/</link><pubDate>Fri, 27 Jun 2025 00:00:00 +0000</pubDate><guid>/docs/admin/01-managing_user_accounts/</guid><description>
&lt;div class="pageinfo pageinfo-primary">
&lt;p>iTop 提供了用户管理模块，允许管理员为用户分配一个（或多个）预定义的配置文件。配置文件的组合决定了每个用户在 iTop 中被允许执行的操作（查看、创建/修改或删除哪些对象）。&lt;/p>
&lt;p>在当前版本的 iTop 中，配置文件是预定义的；没有用户界面来修改它们或创建新配置文件。&lt;/p>
&lt;/div>
&lt;h2 id="查看配置文件">查看配置文件&lt;/h2>
&lt;p>使用&amp;quot;管理工具 / 配置文件&amp;quot;菜单访问配置文件：&lt;/p>
&lt;p>&lt;img src="https://www.itophub.io/wiki/media?w=600&amp;amp;tok=289d99&amp;amp;media=3_2_0:admin:profil-list.png" alt="配置文件列表">&lt;/p>
&lt;p>当点击某个配置文件时，会显示该配置文件的详细信息：&lt;/p>
&lt;ul>
&lt;li>&amp;ldquo;用户&amp;quot;选项卡列出拥有此配置文件的所有用户&lt;/li>
&lt;li>&amp;ldquo;授权矩阵&amp;quot;选项卡显示每个对象类别的允许操作&lt;/li>
&lt;/ul>
&lt;h3 id="itop-核心配置文件">iTop 核心配置文件&lt;/h3>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>ID&lt;/th>
&lt;th>配置文件&lt;/th>
&lt;th>描述&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>1&lt;/td>
&lt;td>Administrator&lt;/td>
&lt;td>拥有所有权限（绕过任何控制）&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>2&lt;/td>
&lt;td>Portal user&lt;/td>
&lt;td>有权访问用户门户。拥有此配置文件的用户无法访问标准应用，将自动重定向到用户门户&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>3&lt;/td>
&lt;td>Configuration Manager&lt;/td>
&lt;td>负责管理配置项文档的人员&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>4&lt;/td>
&lt;td>Service Desk Agent&lt;/td>
&lt;td>负责创建事件报告的人员&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>5&lt;/td>
&lt;td>Support Agent&lt;/td>
&lt;td>分析和解决当前事件的人员&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>6&lt;/td>
&lt;td>Problem Manager&lt;/td>
&lt;td>分析和解决当前问题的人员&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>7&lt;/td>
&lt;td>Change Implementor&lt;/td>
&lt;td>执行变更的人员&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>8&lt;/td>
&lt;td>Change Supervisor&lt;/td>
&lt;td>负责整体变更执行的人员&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>9&lt;/td>
&lt;td>Change Approver&lt;/td>
&lt;td>可能受某些变更影响的人员&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>10&lt;/td>
&lt;td>Service Manager&lt;/td>
&lt;td>负责向（内部）客户交付服务的人员&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>11&lt;/td>
&lt;td>Document author&lt;/td>
&lt;td>任何可能为文档做出贡献的人员&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>12&lt;/td>
&lt;td>Portal power user&lt;/td>
&lt;td>2.0.1 新增。拥有此配置文件的用户有权在门户中查看客户的所有工单。必须与其他配置文件（如 Portal User）配合使用&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>117&lt;/td>
&lt;td>SuperUser&lt;/td>
&lt;td>拥有除管理员专属权限外的所有权限 — iTop 3.2.1 引入&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>1024&lt;/td>
&lt;td>REST Services User&lt;/td>
&lt;td>2.5.0 新增。有权访问 REST Web 服务的用户账号。如果配置设置 &lt;code>secure_rest_services&lt;/code> 设为 &lt;code>true&lt;/code>（默认值），则只有拥有此配置文件的用户账号才能使用 REST Web 服务&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="扩展配置文件">扩展配置文件&lt;/h3>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>ID&lt;/th>
&lt;th>配置文件&lt;/th>
&lt;th>关联权限&lt;/th>
&lt;th>扩展&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>20&lt;/td>
&lt;td>Hostmaster&lt;/td>
&lt;td>处理 IP 空间和监控 IP 变更的人员&lt;/td>
&lt;td>IPAM for iTop&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>21&lt;/td>
&lt;td>IP Helpdesk agent&lt;/td>
&lt;td>处理 IP 请求的人员&lt;/td>
&lt;td>IP Request Management&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>22&lt;/td>
&lt;td>IP Portal user&lt;/td>
&lt;td>有权访问 IP 门户，在控制台被拒绝&lt;/td>
&lt;td>IPAM for iTop&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>40&lt;/td>
&lt;td>Business partner user&lt;/td>
&lt;td>有权访问业务合作伙伴门户，在控制台被拒绝&lt;/td>
&lt;td>Portal for Business Partner&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>43&lt;/td>
&lt;td>User Manager&lt;/td>
&lt;td>有权创建/修改/删除用户&amp;hellip;&lt;/td>
&lt;td>Admin tools delegation(1/2)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>44&lt;/td>
&lt;td>Notification Manager&lt;/td>
&lt;td>有权创建和修改触发器和操作&lt;/td>
&lt;td>Admin tools delegation&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>45&lt;/td>
&lt;td>Audit Manager&lt;/td>
&lt;td>有权创建和修改审计（类别和规则）&lt;/td>
&lt;td>Admin tools delegation&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>46&lt;/td>
&lt;td>Query Manager&lt;/td>
&lt;td>有权创建和修改查询手册&lt;/td>
&lt;td>Admin tools delegation&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>47&lt;/td>
&lt;td>SynchroData Manager&lt;/td>
&lt;td>有权创建和修改同步数据源&lt;/td>
&lt;td>Admin tools delegation&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>48&lt;/td>
&lt;td>Admin Tools Manager&lt;/td>
&lt;td>有权执行上述所有操作&lt;/td>
&lt;td>Admin tools delegation&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>49&lt;/td>
&lt;td>Time Tracker&lt;/td>
&lt;td>有权跟踪自己的时间&lt;/td>
&lt;td>Time Tracking&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>50&lt;/td>
&lt;td>Time Tracking Manager&lt;/td>
&lt;td>有权跟踪他人的时间并访问任何人跟踪的时间&lt;/td>
&lt;td>Time Tracking&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>51&lt;/td>
&lt;td>Archiving Agent&lt;/td>
&lt;td>有权定义归档规则&lt;/td>
&lt;td>Data archiver&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>52&lt;/td>
&lt;td>Anonymization Agent&lt;/td>
&lt;td>有权匿名化人员&lt;/td>
&lt;td>Personal data anonymizer&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>107&lt;/td>
&lt;td>Communication Manager&lt;/td>
&lt;td>有权管理通信&lt;/td>
&lt;td>Communications to the Customers&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>120&lt;/td>
&lt;td>Query History&lt;/td>
&lt;td>拥有所有权限，但查询历史（CMDBChange）除外&lt;/td>
&lt;td>Admin tools delegation(2/2)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>121&lt;/td>
&lt;td>Mail Inbox Manager&lt;/td>
&lt;td>有权创建/修改邮件收件箱和 OAuth 客户端&lt;/td>
&lt;td>Mail to Ticket Automation&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>122&lt;/td>
&lt;td>Mail Messages Manager&lt;/td>
&lt;td>有权查看、修改和删除邮件消息并读取邮件收件箱&lt;/td>
&lt;td>Mail to Ticket Automation&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>130&lt;/td>
&lt;td>Ansible Manager&lt;/td>
&lt;td>负责 iTop 中 Ansible 文档并有权执行 Ansible 专用 REST Web 服务&lt;/td>
&lt;td>Data model for Ansible&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>160&lt;/td>
&lt;td>Release Agent&lt;/td>
&lt;td>负责开发新功能或解决软件/产品缺陷&lt;/td>
&lt;td>Software and Release management&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>161&lt;/td>
&lt;td>Product Owner&lt;/td>
&lt;td>负责产品（测试和增强）&lt;/td>
&lt;td>Software and Release management&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>162&lt;/td>
&lt;td>Release Manager&lt;/td>
&lt;td>负责发布流程（验收测试、CAB、早期支持）&lt;/td>
&lt;td>Software and Release management&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>170&lt;/td>
&lt;td>VCS Manager&lt;/td>
&lt;td>负责版本控制系统管理&lt;/td>
&lt;td>VCS Integration&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>800&lt;/td>
&lt;td>Alarms Manager&lt;/td>
&lt;td>允许确认警报而不创建工单&lt;/td>
&lt;td>Alarm Console&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>1025&lt;/td>
&lt;td>Project Manager&lt;/td>
&lt;td>处理项目/风险/问题/WBS&lt;/td>
&lt;td>Project Management Extended&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>5323&lt;/td>
&lt;td>CMDB Guest&lt;/td>
&lt;td>对 CMDB 和 IP 对象（仅）拥有只读权限（不允许批量读取）&lt;/td>
&lt;td>IPAM for iTop&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>5324&lt;/td>
&lt;td>Hostmaster - DNS&lt;/td>
&lt;td>处理 DNS 空间&lt;/td>
&lt;td>DNS Zone Management&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>5325&lt;/td>
&lt;td>DHCP Manager&lt;/td>
&lt;td>处理 DHCP 空间&lt;/td>
&lt;td>DHCP Management&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>5326&lt;/td>
&lt;td>IP Portal Automation user&lt;/td>
&lt;td>有资格自动处理其 IP 请求。必须与 &amp;ldquo;IP Portal user&amp;rdquo; 配置文件配合使用&lt;/td>
&lt;td>IP Request Management&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>5327&lt;/td>
&lt;td>Network Security Manager&lt;/td>
&lt;td>负责网络安全。必须与 &amp;ldquo;Configuration Manager&amp;rdquo; 配置文件配合使用&lt;/td>
&lt;td>Network Management Extended&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>5328&lt;/td>
&lt;td>Phone Numbers Manager&lt;/td>
&lt;td>负责电话号码空间&lt;/td>
&lt;td>Phone Number Management&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="查看用户账号">查看用户账号&lt;/h2>
&lt;p>&amp;ldquo;管理工具&amp;quot;模块下的&amp;quot;用户账号&amp;quot;菜单，可以查看为 iTop 实例定义的所有登录账号。&lt;/p>
&lt;p>点击某个用户时，会显示以下详细信息：&lt;/p>
&lt;p>用户账号必须关联到 CMDB 中存储的一个&lt;strong>人员&lt;/strong>（请参阅 CMDB 模块文档）。在创建登录账号之前，请确保该用户已在 CMDB 中作为&lt;strong>人员&lt;/strong>记录。&lt;/p>
&lt;p>如果登录账号没有定义联系人，则该登录账号将受到若干限制（列表非详尽）：&lt;/p>
&lt;ul>
&lt;li>无法接收邮件通知。例如：为客户 x 创建了工单&lt;/li>
&lt;li>无法对某事负责。例如：作为工单分配到的代理&lt;/li>
&lt;li>无法访问客户门户&lt;/li>
&lt;/ul>
&lt;p>&amp;ldquo;配置文件&amp;quot;选项卡列出与此用户关联的所有配置文件。&amp;ldquo;授权矩阵&amp;quot;选项卡显示允许给此用户的权限。它是所有关联配置文件对应权限的合并。&amp;ldquo;允许的组织&amp;quot;选项卡显示允许此用户查看的组织列表。&lt;/p>
&lt;h2 id="创建用户">创建用户&lt;/h2>
&lt;p>要创建新用户，只需在操作下拉列表中点击&amp;quot;新建&amp;rdquo;，无论是从用户列表还是给定用户的详情页面。随后会出现以下向导：&lt;/p>
&lt;p>管理员可以根据所需的认证类型定义不同类型的用户账号：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>iTop 用户&lt;/strong>：账号在 iTop 内部管理。密码存储（加密）在 iTop 的数据库中。此类型适用于管理用户、脚本以及与其他应用的集成。&lt;/li>
&lt;li>&lt;strong>LDAP 用户&lt;/strong>：认证由外部 LDAP 或 Active Directory 服务器完成。&lt;/li>
&lt;li>&lt;strong>外部用户&lt;/strong>：认证由 Web 服务器直接管理，例如使用 Apache .htaccess 文件或外部单点登录解决方案（如 JASIG-CAS）。&lt;/li>
&lt;/ul>
&lt;p>iTop 中所有关于认证的详细信息都在&lt;a href="https://www.itophub.io/wiki/page?id=3_2_0:admin:password-policy">用户认证选项&lt;/a>章节中描述。&lt;/p>
&lt;p>如果决定创建 &lt;strong>iTop 用户&lt;/strong>，必须输入密码并再次输入以确认。如果两次密码不匹配，密码字段右侧会显示感叹号。&lt;/p>
&lt;p>如需实现密码续期策略，请遵循&lt;a href="https://www.itophub.io/wiki/page?id=3_2_0:admin:password-policy">相关指南&lt;/a>。&lt;/p>
&lt;p>用户记录定义：&lt;/p>
&lt;ul>
&lt;li>该用户的首选语言，用于显示 iTop 用户界面&lt;/li>
&lt;li>与此用户账号关联的联系人。对于门户用户，此联系人还用于确定门户的默认组织&lt;/li>
&lt;li>此账号的配置文件列表。每个 iTop 用户账号必须至少有一个配置文件&lt;/li>
&lt;/ul>
&lt;p>&amp;ldquo;添加配置文件&amp;hellip;&amp;ldquo;按钮显示搜索窗口，用于选择要分配给用户的配置文件。分配的配置文件可以在稍后使用用户的&amp;quot;修改&amp;quot;操作进行更改。&lt;/p>
&lt;h2 id="批量导入登录账号">批量导入登录账号&lt;/h2>
&lt;p>要批量创建多个登录账号，可以使用 CSV 导入工具。&lt;/p>
&lt;p>检查&lt;a href="https://www.itophub.io/wiki/page?id=3_2_0:admin:password-policy">批量导入关系格式&lt;/a>。&lt;/p>
&lt;p>可以参考&lt;a href="https://www.itophub.io/wiki/page?id=3_2_0:admin:password-policy">此示例&lt;/a>，该示例用于 CLI 导入，但 CSV 导入格式相同。&lt;/p>
&lt;h3 id="限制对一组组织的访问">限制对一组组织的访问&lt;/h3>
&lt;p>管理员可以为每个用户定义允许其访问的组织列表，使用&amp;quot;允许的组织&amp;quot;选项卡。如果未选择任何组织，则允许该用户查看所有组织。&lt;/p>
&lt;p>在组织层级结构的情况下（某些组织有父组织），权限从父组织继承到子组织。换句话说，如果用户有权访问父组织，则该用户也有权访问该组织的所有子组织。&lt;/p>
&lt;p>属于禁止访问的组织的所有对象对给定用户完全隐藏。对于该用户，应用程序的行为就好像这些对象不存在一样。&lt;/p>
&lt;p>选定的组织可以在稍后使用用户的&amp;quot;修改&amp;quot;操作进行更改。&lt;/p>
&lt;h3 id="更改用户密码">更改用户密码&lt;/h3>
&lt;p>管理员可以在需要时通过使用用户的&amp;quot;修改&amp;quot;操作来更改用户密码。这对于重置用户密码很有用。&lt;/p>
&lt;p>用户可以通过点击&amp;quot;注销&amp;quot;菜单并选择&amp;quot;更改密码&amp;hellip;&amp;ldquo;来更改自己的密码。&lt;/p>
&lt;h3 id="忘记密码">忘记密码&lt;/h3>
&lt;p>拥有 &lt;strong>iTop 用户&lt;/strong> 类型账号的用户可以自行重置密码：无需管理员进行任何操作。&lt;/p>
&lt;p>更多信息请参阅&lt;a href="./forgot_password/">忘记密码&lt;/a>章节。&lt;/p>
&lt;h3 id="停用账号">停用账号&lt;/h3>
&lt;p>从 &lt;strong>iTop 2.3.0&lt;/strong> 开始，用户账号上新增了一个&amp;quot;状态&amp;quot;字段。&amp;ldquo;状态&amp;quot;有两个可能的值：&amp;ldquo;启用&amp;quot;或&amp;quot;禁用&amp;rdquo;。设置为&amp;quot;禁用&amp;quot;时，账号被停用，用户无法再连接到 iTop。默认值为&lt;strong>启用&lt;/strong>。&lt;/p>
&lt;h2 id="委派给非管理员">委派给非管理员&lt;/h2>
&lt;p>可以将用户管理委派给没有管理员配置文件的用户：&lt;a href="../delegate-admin-tools/">委派&amp;quot;管理工具&amp;quot;菜单&lt;/a>。&lt;/p>
&lt;hr>
&lt;p>原文：&lt;a href="https://www.itophub.io/wiki/page?id=3_2_0:admin:managing_user_accounts">https://www.itophub.io/wiki/page?id=3_2_0:admin:managing_user_accounts&lt;/a>&lt;/p>
&lt;p>Last modified: 2025/03/10 10:24 by127.0.0.1&lt;/p>
&lt;p>版本：3_2_0/admin/managing_user_accounts.txt · Last modified: 2026/06/26 11:13 by 127.0.0.1&lt;/p></description></item><item><title>Docs: 用户认证选项</title><link>/docs/admin/user_authentication_options/</link><pubDate>Fri, 27 Jun 2025 00:00:00 +0000</pubDate><guid>/docs/admin/user_authentication_options/</guid><description>
&lt;div class="pageinfo pageinfo-primary">
&lt;p>本文档介绍 iTop 的用户认证选项。为了与环境无缝集成，iTop 支持多种认证机制，可以在同一实例中按用户混合使用不同的认证类型。更多详细内容请参考 &lt;a href="https://www.itophub.io/wiki/page?id=3_2_0:admin:user_authentication_options">iTop 官方文档&lt;/a>。&lt;/p>
&lt;/div>
&lt;h2 id="概述">概述&lt;/h2>
&lt;p>为了与环境无缝集成，iTop 可以使用多种认证机制。iTop 的部分行为是在 Web 服务器层面定义的，但可以在每个用户的基础上混合使用不同的认证类型。&lt;/p>
&lt;p>例如，如果您已经使用 LDAP 服务器对终端用户进行认证，那么可以方便地对终端用户使用 LDAP 认证，而对自动化流程和脚本使用的功能账号使用本地密码认证。&lt;/p>
&lt;p>在本文档中，&amp;ldquo;外部认证&amp;rdquo; 是指用户认证完全在 iTop 之外进行（由 Web 服务器或某种 Web 服务器插件完成）。在这种情况下，iTop 应用程序只会接收经过 Web 服务器验证后的已认证用户的名称。如果您将 iTop 安装在 Apache 下，并使用 .htaccess 文件保护目录，就会发生这种情况。&amp;ldquo;外部认证&amp;rdquo; 也用于使用外部服务器的认证。在这种情况下，用户是 &amp;ldquo;外部&amp;rdquo; 的，但登录类型不是 &amp;ldquo;外部&amp;rdquo;。&lt;/p>
&lt;p>部署 iTop 时，您必须决定应用程序是使用外部认证机制还是依赖 iTop 内部机制。如果应用程序使用 &amp;ldquo;内部&amp;rdquo; 认证，则同一安装可以共存多种认证类型（例如，您可以配置 iTop 使用基于表单的对话框，并混合使用 LDAP 和内部用户）。&lt;/p>
&lt;p>如果认证不是 &amp;ldquo;外部&amp;rdquo; 的，那么 iTop 将主动参与认证过程。目前 iTop 支持三种内部认证类型：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>本地（Local）&lt;/strong>：基于加密存储在 iTop 数据库中的密码&lt;/li>
&lt;li>&lt;strong>应用令牌（Application Token）&lt;/strong>：基于加密存储在 iTop 数据库中的令牌&lt;/li>
&lt;li>&lt;strong>LDAP&lt;/strong>：通过与远程 LDAP 或 Active Directory 服务器交互&lt;/li>
&lt;/ul>
&lt;h2 id="登录类型控制台和门户">登录类型（控制台和门户）&lt;/h2>
&lt;p>为了认证用户，应用程序必须提示用户输入登录名和密码。iTop 提供了几种方法来处理与终端用户的登录对话：&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>登录类型&lt;/th>
&lt;th>用途&lt;/th>
&lt;th>限制&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>form&lt;/td>
&lt;td>基于表单的登录，最适合交互式登录。还提供注销/登出功能&lt;/td>
&lt;td>不适合批处理/脚本使用，或在终端用户&amp;quot;隐藏&amp;quot; Web 浏览器的情况下使用（例如 Excel Web 查询）&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>basic&lt;/td>
&lt;td>基本 HTTP 认证。兼容所有支持此协议的应用程序（例如 wget、Excel Web 查询）&lt;/td>
&lt;td>没有注销/登出功能&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>cas&lt;/td>
&lt;td>使用 JA-SIG CAS API 连接到 CAS 服务器进行认证&lt;/td>
&lt;td>提供与其他 CAS 应用程序的透明单点登录，例如 LifeRay 门户&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>url&lt;/td>
&lt;td>兼容任何应用程序。如果您想在 OpenOffice 中运行 Web 查询，则需要使用此方式&lt;/td>
&lt;td>密码必须以明文形式写在页面地址中！&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>token&lt;/td>
&lt;td>专为应用程序连接 iTop Web 服务而设计，更多详情见下文&lt;/td>
&lt;td>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>external&lt;/td>
&lt;td>当认证由 Web 服务器本身在访问 iTop 应用程序之前完成时使用&lt;/td>
&lt;td>iTop 在 &amp;ldquo;外部&amp;rdquo; 用户连接时不执行任何认证。iTop 只是信任 Web 服务器传递的参数&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="更多详情">更多详情&lt;/h3>
&lt;ul>
&lt;li>&lt;strong>&amp;ldquo;基于表单的对话框&amp;rdquo;&lt;/strong>：这是默认机制，向终端用户显示格式化的对话框。&lt;/li>
&lt;li>&lt;strong>&amp;ldquo;基本认证（Basic Authentication）&amp;rdquo;&lt;/strong>：此机制依赖于 HTTP 协议的基本认证。在大多数 Web 浏览器中，这会显示为弹出窗口。命令行工具（如 wget）通常可以使用这种类型的认证。&lt;/li>
&lt;li>&lt;strong>&amp;ldquo;CAS&amp;rdquo;&lt;/strong>：在此模式下，iTop 将认证委托给兼容 CAS 的服务器。&lt;/li>
&lt;li>&lt;strong>&amp;ldquo;URL&amp;rdquo;&lt;/strong>：某些脚本或应用程序传递认证凭据的能力非常有限。在这种情况下，可以直接在 URL 中传递登录名和密码。请注意，出于安全考虑，此方法默认禁用，但可以通过配置启用。&lt;/li>
&lt;li>&lt;strong>&amp;ldquo;外部（External）&amp;rdquo;&lt;/strong>：当认证已由 Web 服务器完成，并且 iTop 仅作为服务器端变量接收已认证用户的名称时，使用此登录类型。&lt;/li>
&lt;/ul>
&lt;h2 id="登录类型web-服务">登录类型（Web 服务）&lt;/h2>
&lt;p>为了访问 Web 服务（如 REST API），您必须在 HTTP 请求中提供认证数据。&lt;/p>
&lt;p>根据当前 &lt;code>allowed_login_types&lt;/code> 的配置，您需要选择以下认证方法之一：&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>允许的登录类型&lt;/th>
&lt;th>如何构建 HTTP 请求&lt;/th>
&lt;th>curl 示例（Linux）&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>basic&lt;/td>
&lt;td>按照基本认证标准在 HTTP 头中提供用户名和密码&lt;/td>
&lt;td>&lt;code>curl https://my.itop.com/.../api.php -F param1=xyz... --basic -u $NAME:$PASSWORD&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>form&lt;/td>
&lt;td>必须 POST &lt;code>auth_user&lt;/code> 和 &lt;code>auth_pwd&lt;/code>&lt;/td>
&lt;td>&lt;code>curl https://my.itop.com/.../api.php -F param1=xyz... -F auth_user=$USER -F auth_pwd=$PASSWORD&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>url&lt;/td>
&lt;td>必须在 URL 中传递 &lt;code>auth_user&lt;/code> 和 &lt;code>auth_pwd&lt;/code>&lt;/td>
&lt;td>&lt;code>curl https://my.itop.com/.../api.php -G -F param1=xyz... -F auth_user=$USER -F auth_pwd=$PASSWORD&lt;/code>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>curl https://my.itop.com/.../api.php -F &lt;span style="color:#000">param1&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>xyz... --basic -u &lt;span style="color:#000">$NAME&lt;/span>:&lt;span style="color:#000">$PASSWORD&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>curl https://my.itop.com/.../api.php -F &lt;span style="color:#000">param1&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>xyz... -F &lt;span style="color:#000">auth_user&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#000">$USER&lt;/span> -F &lt;span style="color:#000">auth_pwd&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#000">$PASSWORD&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>curl https://my.itop.com/.../api.php -G -F &lt;span style="color:#000">param1&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>xyz... -F &lt;span style="color:#000">auth_user&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#000">$USER&lt;/span> -F &lt;span style="color:#000">auth_pwd&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#000">$PASSWORD&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="配置文件">配置文件&lt;/h2>
&lt;p>iTop 配置文件中的参数 &lt;code>allowed_login_types&lt;/code> 通过定义启用哪些登录方法以及应用程序尝试它们的顺序来决定 iTop 应用程序的行为。&lt;/p>
&lt;p>此参数是一个文本字符串，其中值由管道符（&lt;code>|&lt;/code>）分隔。字符串由 &lt;code>form&lt;/code>、&lt;code>basic&lt;/code>、&lt;code>url&lt;/code>、&lt;code>cas&lt;/code> 和 &lt;code>external&lt;/code> 按所需顺序组合而成。&lt;/p>
&lt;p>默认模式是列表中的第一个。它定义了未提供凭据时应用程序的行为。第一个 &amp;ldquo;模式&amp;rdquo; 必须是 &lt;code>form&lt;/code>、&lt;code>basic&lt;/code>、&lt;code>cas&lt;/code> 或 &lt;code>external&lt;/code> 之一。&lt;/p>
&lt;p>此外，默认设置了密码策略，可以进行自定义。&lt;/p>
&lt;h2 id="login_mode-页面参数">&amp;rsquo;login_mode&amp;rsquo; 页面参数&lt;/h2>
&lt;p>连接到任何 iTop 网页时，可以通过在 URL 中指定参数 &amp;ldquo;login_mode&amp;rdquo; 来覆盖默认登录模式。&lt;/p>
&lt;p>值是允许的模式之一：&lt;code>form&lt;/code>、&lt;code>basic&lt;/code>、&lt;code>url&lt;/code>、&lt;code>cas&lt;/code>、&lt;code>external&lt;/code>。只要配置文件中启用了相应模式，就会使用此登录模式（仅针对此次连接，不会持久化）。如果值无效，则忽略它并使用配置文件中定义的第一个 &amp;ldquo;模式&amp;rdquo;。&lt;/p>
&lt;p>例如，如果配置文件包含：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-php" data-lang="php">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">allowed_login_types&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;form|basic|external&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>并且页面使用参数 &lt;code>?login_mode=basic&lt;/code> 调用，则此页面将使用基本认证机制。&lt;/p>
&lt;p>如果页面使用参数 &lt;code>?login_mode=url&amp;amp;auth_user=foo&amp;amp;auth_pwd=bar&lt;/code> 调用，由于 &lt;code>url&lt;/code> 模式被排除在配置之外，将使用默认模式（在上例中为 &lt;code>form&lt;/code>）。&lt;/p>
&lt;h2 id="示例">示例&lt;/h2>
&lt;p>对于用户通过本地密码（存储在 iTop 数据库中）或 LDAP 服务器进行认证的 iTop 实例，并且用户使用 Web 浏览器（在应用程序中导航）或 Microsoft Excel（运行一些 Web 查询报告），可以在配置文件中设置以下值：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-php" data-lang="php">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&amp;#39;allowed_login_types&amp;#39;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;form|basic&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>连接到应用程序时，终端用户将使用常规的 iTop 登录表单提示输入登录名/密码。交互式使用应用程序时，终端用户可以使用 &amp;ldquo;注销菜单&amp;rdquo; 退出应用程序。&lt;/p>
&lt;p>使用 Excel 时，可以通过在 Web 查询页面链接末尾添加 &lt;code>&amp;amp;login_mode=basic&lt;/code>，让 Excel 在首次启动 Web 查询时提示用户输入登录名/密码。&lt;/p>
&lt;p>在此配置中，还可以使用命令行工具（如 wget）让脚本从 iTop 检索数据，语法如下：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>wget --http-user&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&amp;lt;login&amp;gt; --http-password&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&amp;lt;password&amp;gt; -O test.csv --auth-no-challenge &lt;span style="color:#4e9a06">&amp;#34;http://127.0.0.1/webservices/export.php?expression=SELECT%20Contact&amp;amp;format=csv&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>或者使用以下替代命令：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>wget --no-check-certificate --http-user&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>admin --http-password&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>admin2 -O test.csv &lt;span style="color:#4e9a06">&amp;#34;https://127.0.0.1/webservices/export.php?expression=SELECT%20Contact&amp;amp;format=csv&amp;amp;login_mode=basic&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>在第一个命令行中，wget 会自动将凭据发送到 Web 服务器（使用基本认证机制），iTop 将检测到它们的存在。&lt;/p>
&lt;p>在第二个命令中，wget 起初不会发送任何凭据，但告诉 iTop 首选的认证方式是 &amp;ldquo;basic&amp;rdquo;（即基本认证），wget 将从 Web 服务器收到 &amp;ldquo;401 未授权&amp;rdquo; 的响应，然后使用提供的凭据重试。&lt;/p>
&lt;h2 id="基本认证与-apache-cgi-模式">基本认证与 Apache CGI 模式&lt;/h2>
&lt;p>Apache Web 服务器中的 PHP 可以配置为以两种不同模式运行：作为模块或作为 CGI。&lt;/p>
&lt;p>使用基本认证机制时，iTop 依赖 Web 服务器填充两个 PHP 内部变量：&lt;code>$_SERVER['PHP_AUTH_USER']&lt;/code> 和 &lt;code>$_SERVER['PHP_AUTH_PW']&lt;/code>。当 PHP 作为 Apache 模块运行时，当终端用户填写 &amp;ldquo;基本认证&amp;rdquo; 弹出对话框时，Web 服务器会自动填充这两个变量，但当 PHP 作为 CGI 运行时则不会。&lt;/p>
&lt;p>在后一种情况下，可以使用简单的重写规则将认证信息传递给 PHP。&lt;/p>
&lt;p>操作方法如下：&lt;/p>
&lt;p>确保 Apache 中已激活重写引擎模块，否则 &amp;ldquo;重写规则&amp;rdquo; 将被忽略（如果不确定重写引擎是否已启用，可以注释掉下面示例中的 &lt;code>&amp;lt;IfModule mod_rewrite.c&amp;gt;&lt;/code> 和 &lt;code>&amp;lt;/IfModule&amp;gt;&lt;/code> 两行。然后重启 Apache。如果在 Apache 日志文件中看到关于 &amp;ldquo;RewriteEngine on&amp;rdquo; 不被识别为有效配置指令的错误，则重写引擎未在您的 Web 服务器上配置）。&lt;/p>
&lt;p>使用您喜欢的文本编辑器将以下代码写入 iTop Web 目录根目录的 &lt;code>.htaccess&lt;/code> 文件中（确保运行 PHP/CGI 进程的用户有足够的权限读取此文件）。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-apache" data-lang="apache">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">&amp;lt;IfModule&lt;/span> &lt;span style="color:#4e9a06">mod_rewrite.c&lt;/span>&lt;span style="color:#204a87;font-weight:bold">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87">RewriteEngine&lt;/span> &lt;span style="color:#204a87;font-weight:bold">on&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87">RewriteRule&lt;/span> .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">&amp;lt;/IfModule&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这将使 Apache 服务器使用凭据（base64 编码）填充服务器变量 &lt;code>$_SERVER['HTTP_AUTHORIZATION']&lt;/code>。iTop 读取并解码此变量以提取登录名和密码。&lt;/p>
&lt;h2 id="与外部认证集成">与外部认证集成&lt;/h2>
&lt;p>iTop 可以使用外部认证机制（Apache 的 .htaccess 文件、CA SiteMinder 代理等），但用户的配置文件始终在 iTop 中定义，对于每个允许连接到 iTop 的用户，数据库中必须有一个 iTop &amp;ldquo;外部用户&amp;rdquo; 记录。&lt;/p>
&lt;p>使用外部认证机制时，任何对 iTop 应用程序的请求都会被拦截，终端用户会在连接到 iTop 之前被要求输入认证信息。在这种情况下，iTop 不知道认证方式（登录名/密码、智能卡上存储的证书等）。对 iTop 来说唯一重要的信息是已认证用户的 &amp;ldquo;登录名&amp;rdquo;（即标识符）。&lt;/p>
&lt;p>iTop 使用 PHP 应用程序的标准机制，默认读取 &lt;code>$_SERVER['REMOTE_USER']&lt;/code> 服务器变量。如果在 iTop 数据库中找到具有相应登录名的 &amp;ldquo;外部用户&amp;rdquo; 记录，该用户将连接到 iTop。如果未找到匹配项，则将使用下一个认证机制，并提示用户使用 iTop 进行认证。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-php" data-lang="php">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&amp;#39;ext_auth_variable&amp;#39;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;$_SERVER[\&amp;#39;REMOTE_USER\&amp;#39;]&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>例如，如果您的单点登录系统使用 cookie 变量 &lt;code>auth_user&lt;/code> 传递用户名，您可以使用：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-php" data-lang="php">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&amp;#39;ext_auth_variable&amp;#39;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;$_COOKIE[\&amp;#39;auth_user\&amp;#39;]&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>如果您的系统使用 HTTP 头，您也可以使用 PHP 函数 &lt;code>getallheaders()&lt;/code>，它返回每个头变量的数组。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-php" data-lang="php">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&amp;#39;ext_auth_variable&amp;#39;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;getallheaders()[\&amp;#39;SSL_DN_CERTIFICATE\&amp;#39;]&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-php" data-lang="php">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&amp;#39;allowed_login_types&amp;#39;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;external|form|basic&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>由于认证完全委托，iTop 无法提供注销机制。对于使用外部方法认证的用户，注销菜单项将被隐藏。请注意，iTop 会话 cookie 将一直保留到浏览器窗口关闭！&lt;/p>
&lt;p>由于 iTop 使用 PHP 变量 &lt;code>$_SERVER['REMOTE_USER']&lt;/code> 来识别外部用户，如果您的 Web 服务器运行在 Windows 上，这就变得非常简单。使用 IIS 时，您可以依赖集成 Windows 认证；如果使用 Apache，可以使用 &lt;code>sspi_auth_module&lt;/code>。两者都会将变量 &lt;code>$_SERVER['REMOTE_USER']&lt;/code> 设置为已认证用户，格式为 &amp;ldquo;DOMAIN\USERNAME&amp;rdquo;。只需以相同方式创建您的外部用户名称：DOMAIN\USERNAME，iTop 认证对您的终端用户将是透明的。&lt;/p>
&lt;h3 id="使用-apache-htpasswd-进行外部认证的示例配置">使用 Apache .htpasswd 进行外部认证的示例配置&lt;/h3>
&lt;p>在下面的示例中，用户由存储在 &lt;code>/var/www/&lt;/code> 的 &lt;code>.htpasswd&lt;/code> 文件进行认证。&lt;/p>
&lt;p>您可以使用以下命令为相应用户生成登录名和密码。&lt;/p>
&lt;p>在激活外部认证之前，您必须至少创建一个与 &lt;code>.htpasswd&lt;/code> 文件中定义的用户对应的外部用户，并赋予 &amp;ldquo;Administrator&amp;rdquo; 配置文件。&lt;/p>
&lt;p>这非常重要，因为 iTop 的本地认证将被 Apache 服务器自动停用。&lt;/p>
&lt;p>然后要在 iTop 中激活外部认证，您必须将外部选项设置为 iTop 配置文件中的第一个选项。&lt;/p>
&lt;h4 id="itop-配置">iTop 配置&lt;/h4>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-php" data-lang="php">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">$MySettings&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#204a87;font-weight:bold">array&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">...&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#39;allowed_login_types&amp;#39;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;external|form|basic&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">...&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">);&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>完成后，您只需按如下方式更改 Apache Web 服务器的配置：&lt;/p>
&lt;h4 id="apache-配置文件">Apache 配置文件&lt;/h4>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-apache" data-lang="apache">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">&amp;lt;Directory&lt;/span> &lt;span style="color:#4e9a06">/var/www/&lt;/span>&lt;span style="color:#204a87;font-weight:bold">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87">AuthUserFile&lt;/span> &lt;span style="color:#4e9a06">/var/www/.htpasswd&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87">AuthName&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;Please identify yourself...&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87">AuthType&lt;/span> Basic
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87">require&lt;/span> valid-user
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">&amp;lt;/Directory&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="集成测试脚本">集成测试脚本&lt;/h4>
&lt;p>如果您使用第三方认证机制，可以将以下 PHP 脚本放在 iTop 的 &lt;code>pages&lt;/code> 目录中的文件中。然后将您的 Web 浏览器指向它来测试您的外部认证是否将适当的信息传递给 iTop。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-php" data-lang="php">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">&amp;lt;?&lt;/span>&lt;span style="color:#000">php&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic">//
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic">// Script to test External Authentication
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic">//
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">require_once&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#39;../approot.inc.php&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">require_once&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#000">APPROOT&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#4e9a06">&amp;#39;core/config.class.inc.php&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">require_once&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#000">APPROOT&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#4e9a06">&amp;#39;application/utils.inc.php&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">require_once&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#000">APPROOT&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#4e9a06">&amp;#39;application/startup.inc.php&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">echo&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;&amp;lt;h1&amp;gt;External Authentication: Integration Test Script&amp;lt;/h1&amp;gt;&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">try&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">$aAllowedLoginTypes&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#000">utils&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">::&lt;/span>&lt;span style="color:#c4a000">GetConfig&lt;/span>&lt;span style="color:#000;font-weight:bold">()&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">-&amp;gt;&lt;/span>&lt;span style="color:#c4a000">GetAllowedLoginTypes&lt;/span>&lt;span style="color:#000;font-weight:bold">();&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">$sAllowedLoginTypes&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#000">implode&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#39;|&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span> &lt;span style="color:#000">$aAllowedLoginTypes&lt;/span>&lt;span style="color:#000;font-weight:bold">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">echo&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;&amp;lt;p&amp;gt;allowed_login_types set to &amp;#39;&lt;/span>&lt;span style="color:#4e9a06">$sAllowedLoginTypes&lt;/span>&lt;span style="color:#4e9a06">&amp;#39;&amp;lt;/p&amp;gt;&lt;/span>&lt;span style="color:#4e9a06">\n&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">!&lt;/span>&lt;span style="color:#000">in_array&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#39;external&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span> &lt;span style="color:#000">$aAllowedLoginTypes&lt;/span>&lt;span style="color:#000;font-weight:bold">))&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">echo&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;&amp;lt;p&amp;gt;Check your iTop configuration file, &amp;#34;&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#34;&amp;lt;b&amp;gt;allowed_login_type&amp;lt;/b&amp;gt; does not enable &amp;#34;&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#34;&amp;#39;external&amp;#39; authentication.&amp;lt;/p&amp;gt;&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">else&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">echo&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;&amp;lt;p&amp;gt;Ok, external authentication is enabled by allowed_login_type.&amp;lt;/p&amp;gt;&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">$sExternalAuthVariable&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#000">utils&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">::&lt;/span>&lt;span style="color:#c4a000">GetConfig&lt;/span>&lt;span style="color:#000;font-weight:bold">()&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">-&amp;gt;&lt;/span>&lt;span style="color:#c4a000">GetExternalAuthenticationVariable&lt;/span>&lt;span style="color:#000;font-weight:bold">();&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">echo&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;&amp;lt;p&amp;gt;External Authentication Variable: &amp;#39;&lt;/span>&lt;span style="color:#4e9a06">$sExternalAuthVariable&lt;/span>&lt;span style="color:#4e9a06">&amp;#39;&amp;lt;/p&amp;gt;&lt;/span>&lt;span style="color:#4e9a06">\n&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#000">$sExternalAuthVariable&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">!=&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">$sEval&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;$bVarIsSet = isset(&amp;#39;&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#000">$sExternalAuthVariable&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#4e9a06">&amp;#39;);&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">eval&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#000">$sEval&lt;/span>&lt;span style="color:#000;font-weight:bold">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#000">$bVarIsSet&lt;/span>&lt;span style="color:#000;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">$sEval&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;$sAuthUser = &amp;#39;&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#000">$sExternalAuthVariable&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#4e9a06">&amp;#39;;&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">eval&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#000">$sEval&lt;/span>&lt;span style="color:#000;font-weight:bold">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">echo&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;&amp;lt;p&amp;gt;External Authentication Variable set to: &amp;#34;&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#34;&amp;#39;&lt;/span>&lt;span style="color:#4e9a06">$sAuthUser&lt;/span>&lt;span style="color:#4e9a06">&amp;#39;&amp;lt;/p&amp;gt;&lt;/span>&lt;span style="color:#4e9a06">\n&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#000">$sAuthUser&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">!=&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">echo&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Ok, integration with external authentication &amp;#34;&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#34;successful !&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&lt;/span>&lt;span style="color:#4e9a06">\n&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">else&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">echo&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;&amp;lt;p&amp;gt;Empty user information passed by the web &amp;#34;&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#34;server.&amp;lt;/p&amp;gt;&lt;/span>&lt;span style="color:#4e9a06">\n&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">else&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">echo&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;&amp;lt;p&amp;gt;External Authentication Variable &amp;lt;b&amp;gt;NOT&amp;lt;/b&amp;gt; set.&amp;lt;/p&amp;gt;&lt;/span>&lt;span style="color:#4e9a06">\n&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">else&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">echo&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;&amp;lt;p&amp;gt;Check your iTop configuration file, &amp;lt;b&amp;gt;ext_auth_var&amp;lt;/b&amp;gt; is set &amp;#34;&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#34;to an empty string.&amp;lt;/p&amp;gt;&lt;/span>&lt;span style="color:#4e9a06">\n&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">catch&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#000">ConfigException&lt;/span> &lt;span style="color:#000">$e&lt;/span>&lt;span style="color:#000;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">echo&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;&amp;lt;p&amp;gt;iTop configuration file not found. Did you already install iTop ?&amp;lt;/p&amp;gt;&lt;/span>&lt;span style="color:#4e9a06">\n&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">echo&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;&amp;lt;hr/&amp;gt;&lt;/span>&lt;span style="color:#4e9a06">\n&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">echo&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;&amp;lt;p&amp;gt;For information:&amp;lt;/p&amp;gt;&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">echo&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;&amp;lt;pre&amp;gt;&lt;/span>&lt;span style="color:#4e9a06">\$&lt;/span>&lt;span style="color:#4e9a06">_SERVER variable:&lt;/span>&lt;span style="color:#4e9a06">\n&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">print_r&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#000">$_SERVER&lt;/span>&lt;span style="color:#000;font-weight:bold">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">echo&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;&lt;/span>&lt;span style="color:#4e9a06">\$&lt;/span>&lt;span style="color:#4e9a06">_COOKIE variable:&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">print_r&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#000">$_COOKIE&lt;/span>&lt;span style="color:#000;font-weight:bold">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">echo&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;\getallheaders() array of headers:&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">print_r&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#000">getallheaders&lt;/span>&lt;span style="color:#000;font-weight:bold">());&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">echo&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;&amp;lt;/pre&amp;gt;&lt;/span>&lt;span style="color:#4e9a06">\n&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic">?&amp;gt;&lt;/span>&lt;span style="color:#a40000">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>此脚本将返回服务器变量，如下所示：&lt;/p>
&lt;p>这将帮助您识别定义已认证用户的变量。它必须返回与 &lt;code>.htpasswd&lt;/code> 文件中存储的登录名以及相应 iTop 外部用户的登录名相同的值。&lt;/p>
&lt;p>因此，您可能会遇到处理 Web 服务调用的困难，但命令行脚本可以正常工作（&lt;code>cron.php&lt;/code> 或 &lt;code>synchro_import.php&lt;/code>）。&lt;/p>
&lt;h2 id="ldap-认证配置">LDAP 认证配置&lt;/h2>
&lt;p>iTop 支持对远程 LDAP 服务器（或 Windows Active Directory 服务器）进行 LDAP 认证。两种类型的用户（在 iTop 本地数据库中存储账户的用户和具有 LDAP 账户的用户）可以在同一 iTop 实例中共存，按用户配置。&lt;/p>
&lt;p>创建 LDAP 用户时，在提示 &amp;ldquo;新建用户账户&amp;rdquo; 时选择适当的类型：&lt;/p>
&lt;h4 id="配置-itop-连接到您的-ldap-服务器">配置 iTop 连接到您的 LDAP 服务器&lt;/h4>
&lt;p>安装 iTop 后，打开文件 &lt;code>config-itop.php&lt;/code> 并查找 &lt;code>authent-ldap&lt;/code> 部分。它应如下所示：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-php" data-lang="php">&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#39;authent-ldap&amp;#39;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#204a87;font-weight:bold">array&lt;/span> &lt;span style="color:#000;font-weight:bold">(&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#39;host&amp;#39;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;localhost&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#39;port&amp;#39;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">389&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#39;default_user&amp;#39;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#39;default_pwd&amp;#39;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#39;base_dn&amp;#39;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;dc=mycompany,dc=com&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#39;user_query&amp;#39;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;(&amp;amp;(uid=%1$s))&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#39;options&amp;#39;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#204a87;font-weight:bold">array&lt;/span> &lt;span style="color:#000;font-weight:bold">(&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#0000cf;font-weight:bold">17&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">3&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#0000cf;font-weight:bold">8&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">0&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000;font-weight:bold">),&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#39;debug&amp;#39;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#204a87;font-weight:bold">false&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#39;servers&amp;#39;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#204a87;font-weight:bold">array&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#39;MySecond-LDAP-Server&amp;#39;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#204a87;font-weight:bold">array&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#39;host&amp;#39;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;server1&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#39;port&amp;#39;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">389&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#39;default_user&amp;#39;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#39;default_pwd&amp;#39;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#39;base_dn&amp;#39;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;dc=mycompany,dc=com&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#39;user_query&amp;#39;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;(&amp;amp;(uid=%1$s))&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#39;options&amp;#39;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#204a87;font-weight:bold">array&lt;/span> &lt;span style="color:#000;font-weight:bold">(&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#0000cf;font-weight:bold">17&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">3&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#0000cf;font-weight:bold">8&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">0&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000;font-weight:bold">),&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#39;debug&amp;#39;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#204a87;font-weight:bold">false&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000;font-weight:bold">),&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000;font-weight:bold">),&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000;font-weight:bold">),&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>其中：&lt;/p>
&lt;ul>
&lt;li>&lt;code>host&lt;/code> 参数必须包含 LDAP 服务器的 IP 地址或主机名&lt;/li>
&lt;li>&lt;code>port&lt;/code> 参数是用于连接 LDAP 的 TCP 端口号（LDAP 默认为 389）&lt;/li>
&lt;/ul>
&lt;p>如果您在 &lt;code>host&lt;/code> 参数中指定了协议，则 &lt;code>port&lt;/code> 的值将被 PHP 忽略（即 &lt;code>ldap://&lt;/code> 意味着端口 389，&lt;code>ldaps://&lt;/code> 意味着端口 636）。&lt;/p>
&lt;p>要通过非标准端口使用 LDAPS 连接，您必须在 &lt;code>host&lt;/code> 中同时指定协议和端口，并将 &lt;code>port&lt;/code> 设为 &lt;code>null&lt;/code>。&lt;/p>
&lt;p>示例：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-php" data-lang="php">&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#39;authent-ldap&amp;#39;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#204a87;font-weight:bold">array&lt;/span> &lt;span style="color:#000;font-weight:bold">(&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#39;host&amp;#39;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;ldaps://ldap.demo.com:6636&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#39;port&amp;#39;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#204a87;font-weight:bold">null&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">...&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000;font-weight:bold">);&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>有关更多信息，请参阅 &lt;code>ldap_connect&lt;/code>。&lt;/p>
&lt;ul>
&lt;li>&lt;code>default_user&lt;/code> 和 &lt;code>default_pwd&lt;/code> 标识一个具有足够权限的 LDAP 账户，可以以只读模式连接到您的 LDAP 服务器以搜索指定用户。在大多数系统上，匿名用户可以做到这一点，因此您可以将这两个字段留空。&lt;/li>
&lt;li>&lt;code>base_dn&lt;/code> 定义用于搜索用户/登录名的 &amp;ldquo;根&amp;rdquo;。它可以是 &amp;ldquo;dc=mycompany,dc=com&amp;rdquo; 或 &amp;ldquo;ou=People,dc=mycompany,dc=com&amp;rdquo; 之类的内容。如果不确定，请咨询您的 LDAP 管理员。&lt;/li>
&lt;li>&lt;code>user_query&lt;/code> 定义一个 LDAP 查询，用于搜索用户。您可以使用以下占位符编写任何有效的 LDAP 查询：
&lt;ul>
&lt;li>&lt;code>%1$s&lt;/code>：用户的 iTop 登录名（即他/她在登录表单中输入的内容）&lt;/li>
&lt;li>&lt;code>%2$s&lt;/code>：用户的名字&lt;/li>
&lt;li>&lt;code>%3$s&lt;/code>：用户的姓氏&lt;/li>
&lt;li>&lt;code>%4$s&lt;/code>：用户的电子邮件&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;code>debug&lt;/code> 必须设置为 &lt;code>true&lt;/code> 才能打开调试跟踪输出（在文件 &lt;code>log/error.log&lt;/code> 中）。由于调试跟踪包含明文密码，建议在生产环境中关闭它们，但在配置阶段它们对排查应用程序行为很有用。&lt;/li>
&lt;li>&lt;code>servers&lt;/code>：服务器配置数组，与默认配置相同。服务器的名称是在 LDAP 用户定义中引用的名称。（如果为空，则使用默认配置）。&lt;/li>
&lt;/ul>
&lt;h4 id="配置-itop-连接到您的-cas-服务器">配置 iTop 连接到您的 CAS 服务器&lt;/h4>
&lt;p>在您的 iTop 服务器上安装 Central Authentication Service，以便能够连接到 CAS 服务器。&lt;/p>
&lt;p>安装 iTop 后，打开文件 &lt;code>config-itop.php&lt;/code> 并将 &lt;code>cas&lt;/code> 添加到 &lt;code>allowed_login_types&lt;/code>：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-php" data-lang="php">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic">//&amp;#39;cas&amp;#39; first, means login will be automatically redirected to CAS
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic">&lt;/span>&lt;span style="color:#000">allowed_login_types&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;cas|form|basic|external&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>配置位于通用 iTop 参数中。&lt;/p>
&lt;p>它应如下所示：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-php" data-lang="php">&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#39;authent-cas&amp;#39;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#204a87;font-weight:bold">array&lt;/span> &lt;span style="color:#000;font-weight:bold">(&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#39;cas_debug&amp;#39;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#204a87;font-weight:bold">false&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#39;cas_host&amp;#39;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#39;cas_port&amp;#39;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#39;cas_context&amp;#39;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#39;cas_version&amp;#39;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#39;service_base_url&amp;#39;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000;font-weight:bold">),&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>所有可能的参数：&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>参数&lt;/th>
&lt;th>类型&lt;/th>
&lt;th>可见？&lt;/th>
&lt;th>描述&lt;/th>
&lt;th>默认值&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>cas_context&lt;/td>
&lt;td>string&lt;/td>
&lt;td>否&lt;/td>
&lt;td>CAS 上下文&lt;/td>
&lt;td>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>cas_debug&lt;/td>
&lt;td>bool&lt;/td>
&lt;td>否&lt;/td>
&lt;td>激活 CAS 调试&lt;/td>
&lt;td>false&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>cas_default_profiles&lt;/td>
&lt;td>string&lt;/td>
&lt;td>否&lt;/td>
&lt;td>当从 CAS 未检索到配置文件时，创建新用户使用的 iTop 配置文件列表，以分号分隔&lt;/td>
&lt;td>Portal user&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>cas_host&lt;/td>
&lt;td>string&lt;/td>
&lt;td>否&lt;/td>
&lt;td>CAS 主机名&lt;/td>
&lt;td>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>cas_logout_redirect_service&lt;/td>
&lt;td>string&lt;/td>
&lt;td>否&lt;/td>
&lt;td>使用 CAS 注销时使用的重定向服务（URL）&lt;/td>
&lt;td>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>cas_memberof&lt;/td>
&lt;td>string&lt;/td>
&lt;td>否&lt;/td>
&lt;td>用户必须是其成员的组名列表，以分号分隔（仅适用于 SAML，例如 cas_version =&amp;gt; &amp;ldquo;S1&amp;rdquo;）&lt;/td>
&lt;td>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>cas_memberof_attribute_name&lt;/td>
&lt;td>string&lt;/td>
&lt;td>否&lt;/td>
&lt;td>2.7.0 新增：CAS 服务器上 memberOf 属性的名称&lt;/td>
&lt;td>memberOf&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>cas_port&lt;/td>
&lt;td>integer&lt;/td>
&lt;td>否&lt;/td>
&lt;td>CAS 服务器使用的端口&lt;/td>
&lt;td>443&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>cas_profile_pattern&lt;/td>
&lt;td>string&lt;/td>
&lt;td>否&lt;/td>
&lt;td>从 LDAP/CAS 组名中提取 iTop 配置文件名称的正则表达式模式&lt;/td>
&lt;td>&lt;code>/^cn=([^,]+),/&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>cas_server_ca_cert_path&lt;/td>
&lt;td>string&lt;/td>
&lt;td>否&lt;/td>
&lt;td>用于验证 CAS 服务器证书的 CA 证书路径&lt;/td>
&lt;td>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>cas_update_profiles&lt;/td>
&lt;td>bool&lt;/td>
&lt;td>否&lt;/td>
&lt;td>是否从 CAS 信息更新现有用户的配置文件&lt;/td>
&lt;td>false&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>cas_user_synchro&lt;/td>
&lt;td>bool&lt;/td>
&lt;td>否&lt;/td>
&lt;td>是否与 CAS/LDAP 同步用户&lt;/td>
&lt;td>false&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>cas_version&lt;/td>
&lt;td>string&lt;/td>
&lt;td>否&lt;/td>
&lt;td>要使用的 CAS 协议版本：&amp;ldquo;1.0&amp;rdquo;（CAS v1）、&amp;ldquo;2.0&amp;rdquo;（CAS v2）或 &amp;ldquo;S1&amp;rdquo;（SAML V1）&lt;/td>
&lt;td>2.0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>service_base_url&lt;/td>
&lt;td>string&lt;/td>
&lt;td>否&lt;/td>
&lt;td>iTop 服务器 URL。iTop 2.7.8 及 3.0.2 之后新增&lt;/td>
&lt;td>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>工作配置示例：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-php" data-lang="php">&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#39;authent-cas&amp;#39;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#204a87;font-weight:bold">array&lt;/span> &lt;span style="color:#000;font-weight:bold">(&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#39;cas_context&amp;#39;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;/cas&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#39;cas_debug&amp;#39;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#204a87;font-weight:bold">true&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#39;cas_host&amp;#39;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;cas-server.combodo.net&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#39;cas_memberof&amp;#39;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;Configuration Manager&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#39;cas_memberof_attribute_name&amp;#39;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;businessCategory&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#39;cas_port&amp;#39;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">8443&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#39;cas_version&amp;#39;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;S1&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#39;cas_user_synchro&amp;#39;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#204a87;font-weight:bold">true&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#39;service_base_url&amp;#39;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;https://my.itop.server.net&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000;font-weight:bold">),&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;p>原文：&lt;a href="https://www.itophub.io/wiki/page?id=3_2_0:admin:user_authentication_options">https://www.itophub.io/wiki/page?id=3_2_0:admin:user_authentication_options&lt;/a>&lt;/p>
&lt;p>版本：3_2_0/admin/user_authentication_options.txt · Last modified: 2025/01/02 12:38 by 127.0.0.1&lt;/p></description></item><item><title>Docs: 审计 CMDB</title><link>/docs/admin/02-audit/</link><pubDate>Thu, 26 Jun 2025 00:00:00 +0000</pubDate><guid>/docs/admin/02-audit/</guid><description>
&lt;div class="pageinfo pageinfo-primary">
&lt;p>&amp;ldquo;审计&amp;quot;用于检查 iTop 数据库中信息的一致性。如&amp;quot;生产环境设备是否都有支持合同？&amp;ldquo;或&amp;quot;所有服务器位置是否已知？&amp;rdquo;&lt;/p>
&lt;p>&lt;strong>审计规则&lt;/strong>分组到&lt;strong>审计类别&lt;/strong>中。类别定义对象范围（OQL 查询），规则定义约束（也是 OQL）。&lt;/p>
&lt;/div>
&lt;h2 id="审计报告">审计报告&lt;/h2>
&lt;p>点击&amp;quot;数据管理 / 审计&amp;quot;运行。每类显示：对象数、错误数、正确率。每条规则显示错误对象数。&lt;/p>
&lt;h2 id="管理审计类别">管理审计类别&lt;/h2>
&lt;p>&amp;ldquo;管理&amp;quot;菜单 → &amp;ldquo;审计类别&amp;rdquo;，由名称、描述和定义集（OQL）组成。&lt;/p>
&lt;h2 id="管理审计规则">管理审计规则&lt;/h2>
&lt;p>规则由名称、描述、查询和 &lt;code>有效对象？&lt;/code> 标志定义：&lt;/p>
&lt;ul>
&lt;li>&lt;code>有效对象？&lt;/code> = &lt;code>否&lt;/code>：查询返回的对象标红（错误对象）&lt;/li>
&lt;li>&lt;code>有效对象？&lt;/code> = &lt;code>是&lt;/code>：查询返回的对象不标红（有效对象）&lt;/li>
&lt;/ul>
&lt;h3 id="示例">示例&lt;/h3>
&lt;p>&lt;strong>无成员的团队&lt;/strong>（&lt;code>有效对象？&lt;/code> = &lt;code>否&lt;/code>）&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sql" data-lang="sql">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">SELECT&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">Team&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">AS&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">t&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">JOIN&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">lnkPersonToTeam&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">AS&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">l1&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">ON&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">l1&lt;/span>&lt;span style="color:#000;font-weight:bold">.&lt;/span>&lt;span style="color:#000">team_id&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#000">t&lt;/span>&lt;span style="color:#000;font-weight:bold">.&lt;/span>&lt;span style="color:#000">id&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">WHERE&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">l1&lt;/span>&lt;span style="color:#000;font-weight:bold">.&lt;/span>&lt;span style="color:#000">person_id&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">!=&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#0000cf;font-weight:bold">0&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>通知=是但无邮箱的人员&lt;/strong>（&lt;code>有效对象？&lt;/code> = &lt;code>是&lt;/code>）&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sql" data-lang="sql">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">SELECT&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">Person&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">WHERE&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">notify&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#4e9a06">&amp;#39;yes&amp;#39;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">AND&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">email&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#4e9a06">&amp;#34;&amp;#34;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;p>原文：&lt;a href="https://www.itophub.io/wiki/page?id=3_2_0:admin:audit">https://www.itophub.io/wiki/page?id=3_2_0:admin:audit&lt;/a>&lt;/p>
&lt;p>版本：3_2_0/admin/audit.txt · Last modified: 2024/09/10 10:25 by 127.0.0.1&lt;/p></description></item><item><title>Docs: 运行对象查询</title><link>/docs/admin/03-objects_queries/</link><pubDate>Thu, 26 Jun 2025 00:00:00 +0000</pubDate><guid>/docs/admin/03-objects_queries/</guid><description>
&lt;div class="pageinfo pageinfo-primary">
&lt;p>使用 OQL 获取符合特定条件的对象集。&lt;/p>
&lt;/div>
&lt;h2 id="使用">使用&lt;/h2>
&lt;p>&amp;ldquo;管理工具 / 运行对象查询&amp;rdquo; → 输入 OQL → &amp;ldquo;执行&amp;rdquo;&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sql" data-lang="sql">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">SELECT&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">Server&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">WHERE&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">status&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#4e9a06">&amp;#39;production&amp;#39;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">SELECT&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">Ticket&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">WHERE&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">contacts_list&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#4e9a06">&amp;#39;&amp;#39;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;blockquote>
&lt;p>参考 &lt;a href="https://www.itophub.io/wiki/page?id=3_2_0:oql:start">OQL 文档&lt;/a>&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;p>原文：&lt;a href="https://www.itophub.io/wiki/page?id=3_2_0:admin:objects_queries">https://www.itophub.io/wiki/page?id=3_2_0:admin:objects_queries&lt;/a>&lt;/p>
&lt;p>版本：3_2_0/admin/objects_queries.txt · Last modified: 2024/09/10 10:25 by 127.0.0.1&lt;/p></description></item><item><title>Docs: 查询手册</title><link>/docs/admin/04-phrasebook/</link><pubDate>Thu, 26 Jun 2025 00:00:00 +0000</pubDate><guid>/docs/admin/04-phrasebook/</guid><description>
&lt;div class="pageinfo pageinfo-primary">
&lt;p>保存 &lt;a href="https://www.itophub.io/wiki/page?id=3_2_0:oql:start">OQL&lt;/a> 查询以供重复使用。&lt;/p>
&lt;/div>
&lt;h2 id="使用">使用&lt;/h2>
&lt;p>&amp;ldquo;管理工具 / 查询手册&amp;rdquo; → 浏览或创建查询&lt;/p>
&lt;h2 id="创建">创建&lt;/h2>
&lt;p>&amp;ldquo;新建查询&amp;rdquo; → 填写&lt;strong>名称&lt;/strong>、&lt;strong>描述&lt;/strong>、&lt;strong>查询语句&lt;/strong> → &amp;ldquo;创建&amp;rdquo;&lt;/p>
&lt;hr>
&lt;p>原文：&lt;a href="https://www.itophub.io/wiki/page?id=3_2_0:admin:phrasebook">https://www.itophub.io/wiki/page?id=3_2_0:admin:phrasebook&lt;/a>&lt;/p>
&lt;p>版本：3_2_0/admin/phrasebook.txt · Last modified: 2024/09/10 10:25 by 127.0.0.1&lt;/p></description></item><item><title>Docs: 导出数据</title><link>/docs/admin/export/</link><pubDate>Fri, 27 Jun 2025 00:00:00 +0000</pubDate><guid>/docs/admin/export/</guid><description>
&lt;div class="pageinfo pageinfo-primary">
&lt;p>iTop 提供了一个通用的 Web 服务，用于基于 OQL 查询导出任何数据。此服务可用于从 iTop 提取数据，以便与第三方工具集成。此 Web 服务可以以多种格式返回数据：&lt;/p>
&lt;ul>
&lt;li>HTML&lt;/li>
&lt;li>CSV&lt;/li>
&lt;li>XML&lt;/li>
&lt;li>Spreadsheet（用于导入到 Excel 或 OpenOffice 的纯 HTML）&lt;/li>
&lt;li>XLSX（Excel 2007、2010、2013&amp;hellip;）&lt;/li>
&lt;li>PDF&lt;/li>
&lt;/ul>
&lt;p>此服务可以通过 iTop 服务器上的命令行界面本地调用，也可以通过 HTTP 请求远程调用。&lt;/p>
&lt;/div>
&lt;h2 id="使用">使用&lt;/h2>
&lt;h3 id="命令行接口">命令行接口&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>php /var/www/itop/webservices/export-v2.php --auth_user&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>login --auth_pwd&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>password --expression&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>query --format&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>csv --fields&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&amp;lt;以逗号分隔的字段列表&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="远程-web-访问">远程 Web 访问&lt;/h3>
&lt;p>有多种方式可以通过 Web 连接远程访问该服务。以下是使用 wget 命令的语法（如果启用了基本认证）：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>wget --http-user&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>login --http-password&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>password http://itopserver/webservices/export-v2.php?expression&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>query&lt;span style="color:#000;font-weight:bold">&amp;amp;&lt;/span>&lt;span style="color:#000">format&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>csv&lt;span style="color:#000;font-weight:bold">&amp;amp;&lt;/span>&lt;span style="color:#000">fields&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&amp;lt;以逗号分隔的字段列表&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>或使用令牌（更安全）：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>wget --post-data&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#4e9a06">&amp;#39;--auth-token=YOURTOKEN&amp;#39;&lt;/span> http://itopserver/webservices/export-v2.php?expression&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>query&lt;span style="color:#000;font-weight:bold">&amp;amp;&lt;/span>&lt;span style="color:#000">format&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>csv&lt;span style="color:#000;font-weight:bold">&amp;amp;&lt;/span>&lt;span style="color:#000">fields&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&amp;lt;以逗号分隔的字段列表&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="参数">参数&lt;/h2>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>参数&lt;/th>
&lt;th>描述&lt;/th>
&lt;th>默认值&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>param_file&lt;/td>
&lt;td>参数文件 — 请参阅参数文件&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>auth_user&lt;/td>
&lt;td>用户登录名 — 仅限 CLI 模式&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>auth_pwd&lt;/td>
&lt;td>用户密码 — 仅限 CLI 模式&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>expression&lt;/td>
&lt;td>OQL 查询&lt;/td>
&lt;td>如果缺少 &amp;lsquo;query&amp;rsquo;，则为必填&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>query&lt;/td>
&lt;td>存储在查询手册中的查询标识符&lt;/td>
&lt;td>如果缺少 &amp;rsquo;expression&amp;rsquo;，则为必填&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>format&lt;/td>
&lt;td>spreadsheet（推荐用于与 MS-Excel Web 查询集成）、html、xml、csv 或 xlsx&lt;/td>
&lt;td>html&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>fields&lt;/td>
&lt;td>以逗号分隔的属性列表（例如 &amp;ldquo;name,brand,model&amp;rdquo;）。支持扩展属性代码（例如 caller_id-&amp;gt;org_id-&amp;gt;code），但可能会显著降低导出速度（因为它们需要额外的数据库查询）。谨慎使用！&lt;/td>
&lt;td>由 expression 指定的类的所有属性代码。这些不是本地化的&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>with_archive&lt;/td>
&lt;td>1：导出将包含归档对象。0 或省略参数：不返回归档对象&lt;/td>
&lt;td>0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>arg_xxx&lt;/td>
&lt;td>如果 OQL 查询有参数，则需要：参数 &amp;lsquo;xxx&amp;rsquo; 的值&lt;/td>
&lt;td>无&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="输出">输出&lt;/h2>
&lt;h3 id="html">HTML&lt;/h3>
&lt;p>HTML 格式将输出作为 HTML 表格提供。&lt;/p>
&lt;h3 id="spreadsheet">Spreadsheet&lt;/h3>
&lt;p>此格式专用于集成到电子表格中。特别是，它是与 Excel Web 查询一起使用的推荐方法。有关此 Excel 集成的更多信息，请参阅文章&amp;quot;如何使用 iTop 查询创建 Excel 报告&amp;quot;。&lt;/p>
&lt;h4 id="格式特定参数">格式特定参数&lt;/h4>
&lt;p>使用 Spreadsheet 格式时，以下附加参数可用：&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>参数名&lt;/th>
&lt;th>描述&lt;/th>
&lt;th>默认值&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>date_format&lt;/td>
&lt;td>用于导出日期和时间字段的格式（使用 PHP 日期和时间说明符指定）&lt;/td>
&lt;td>与 GUI 中相同&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>formatted_text&lt;/td>
&lt;td>是否以 HTML 标记导出富文本字段。1 = 导出标记，0 = 无标记&lt;/td>
&lt;td>1&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>no_localize&lt;/td>
&lt;td>如果设置为 0，则标题和值将以登录用户的语言本地化。设置为 1 以使用内部属性代码和值（枚举）&lt;/td>
&lt;td>0&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="xml">XML&lt;/h3>
&lt;p>使用 XML 格式时，以下附加参数可用：&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>参数名&lt;/th>
&lt;th>描述&lt;/th>
&lt;th>默认值&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>linksets&lt;/td>
&lt;td>设置为 1 以检索指向相关对象的链接（1-多或多-多关系）。0 表示仅返回对象的&amp;quot;标量&amp;quot;值&lt;/td>
&lt;td>0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>no_localize&lt;/td>
&lt;td>如果设置为 0，则标题和值将以登录用户的语言本地化。设置为 1 以使用内部属性代码和值（枚举）&lt;/td>
&lt;td>0&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="csv">CSV&lt;/h3>
&lt;p>CSV 格式输出示例：&lt;/p>
&lt;pre tabindex="0">&lt;code>id,Name,Management IP
1,&amp;#34;dbserver1.demo.com&amp;#34;,&amp;#34;10.1.1.10&amp;#34;
6,&amp;#34;webserver.demo.com&amp;#34;,&amp;#34;10.1.1.20&amp;#34;
&lt;/code>&lt;/pre>&lt;h4 id="格式特定参数-1">格式特定参数&lt;/h4>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>参数名&lt;/th>
&lt;th>描述&lt;/th>
&lt;th>默认值&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>charset&lt;/td>
&lt;td>用于编码输出的字符集&lt;/td>
&lt;td>UTF-8&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>date_format&lt;/td>
&lt;td>用于导出日期和时间字段的格式（使用 PHP 日期和时间说明符指定）&lt;/td>
&lt;td>与 GUI 中相同&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>formatted_text&lt;/td>
&lt;td>是否以 HTML 标记导出富文本字段。1 = 导出标记，0 = 无标记&lt;/td>
&lt;td>0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>no_localize&lt;/td>
&lt;td>如果设置为 0，则标题和值将以登录用户的语言本地化。设置为 1 以使用内部属性代码和值（枚举）&lt;/td>
&lt;td>0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>separator&lt;/td>
&lt;td>输出中字段之间用作分隔符的字符&lt;/td>
&lt;td>,（逗号）&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>text-qualifier&lt;/td>
&lt;td>用于文本字符串的字符&lt;/td>
&lt;td>&amp;ldquo;（双引号）&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="pdf">PDF&lt;/h3>
&lt;p>此格式生成 PDF 文档，包含一个包含请求数据的大表格。注意：表格的自动布局使所有列的宽度相同。因此，它最适合少量（&amp;lt;10）列。要容纳更多列，请使用页面的纵向方向。&lt;/p>
&lt;h4 id="格式特定参数-2">格式特定参数&lt;/h4>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>参数名&lt;/th>
&lt;th>描述&lt;/th>
&lt;th>默认值&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>date_format&lt;/td>
&lt;td>用于导出日期和时间字段的格式（使用 PHP 日期和时间说明符指定）&lt;/td>
&lt;td>与 GUI 中相同&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>page_size&lt;/td>
&lt;td>页面布局的纸张大小。可能的值：A3、A4 或 Letter&lt;/td>
&lt;td>A4&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>page_orientation&lt;/td>
&lt;td>页面纸张的方向。可能的值：Landscape 或 Portrait&lt;/td>
&lt;td>Portrait&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="xlsx">XLSX&lt;/h3>
&lt;h4 id="格式特定参数-3">格式特定参数&lt;/h4>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>参数名&lt;/th>
&lt;th>描述&lt;/th>
&lt;th>默认值&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>date_format&lt;/td>
&lt;td>用于导出日期和时间字段的格式（使用 PHP 日期和时间说明符指定）&lt;/td>
&lt;td>与 GUI 中相同&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>formatted_text&lt;/td>
&lt;td>是否以 HTML 标记导出富文本字段。1 = 导出标记，0 = 无标记&lt;/td>
&lt;td>0&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="历史">历史&lt;/h2>
&lt;ul>
&lt;li>0.9 首次实现此功能&lt;/li>
&lt;li>1.2.1 添加了参数 &amp;lsquo;query&amp;rsquo;，作为 &amp;rsquo;expression&amp;rsquo; 的替代&lt;/li>
&lt;li>1.2.1 添加了格式 &amp;lsquo;spreadsheet&amp;rsquo;，将日期和时间列分开&lt;/li>
&lt;li>1.2.1 修复了 HTTPS 和 MS-IIS 的阻塞问题（Trac:#485）&lt;/li>
&lt;li>1.2.1 参数文件可以作为参数指定（文档是错误的：实际上未实现）&lt;/li>
&lt;li>1.2.1 分支 Spreadsheet 格式：修复了时间问题（Trac:#541）。解决方法是使用 XML 格式（XCel 支持此格式）&lt;/li>
&lt;li>2.0：添加了标志 no_localize&lt;/li>
&lt;li>2.1.0：添加了 XLSX 格式&lt;/li>
&lt;li>2.2.0：通过创建新的 export-v2.php 页面重新设计导出&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>原文：&lt;a href="https://www.itophub.io/wiki/page?id=3_2_0:advancedtopics:exportdata">https://www.itophub.io/wiki/page?id=3_2_0:advancedtopics:exportdata&lt;/a>&lt;/p>
&lt;p>版本：3_2_0/advancedtopics/exportdata.txt · Last modified: 2026/03/10 13:11 by 127.0.0.1&lt;/p></description></item><item><title>Docs: 浏览数据模型</title><link>/docs/admin/05-browsing_the_data_model/</link><pubDate>Thu, 26 Jun 2025 00:00:00 +0000</pubDate><guid>/docs/admin/05-browsing_the_data_model/</guid><description>
&lt;div class="pageinfo pageinfo-primary">
&lt;p>通过&amp;quot;管理工具 / 数据模型&amp;quot;查看当前数据模型。&lt;/p>
&lt;p>&lt;img src="https://www.itophub.io/wiki/media?w=500&amp;amp;tok=089851&amp;amp;media=3_2_0:admin:datamodelviewer-1.png" alt="数据模型查看器">&lt;/p>
&lt;/div>
&lt;h2 id="选择类">选择类&lt;/h2>
&lt;p>右侧浏览器树视图按字母顺序浏览类，支持自动完成过滤。&lt;/p>
&lt;h2 id="类详细信息选项卡">类详细信息选项卡&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>属性&lt;/strong>：属性代码、类型、允许值、更多信息、来源&lt;/li>
&lt;li>&lt;strong>相关类&lt;/strong>：外键、n-1、1-n、n-n 关系图形视图&lt;/li>
&lt;li>&lt;strong>生命周期&lt;/strong>：graphviz 状态转换图，显示事件代码（用于触发器）&lt;/li>
&lt;li>&lt;strong>触发器&lt;/strong>：当前类激活的触发器&lt;/li>
&lt;/ul>
&lt;p>&lt;img src="https://www.itophub.io/wiki/media?w=800&amp;amp;tok=c15de1&amp;amp;media=3_2_0:admin:datamodelviewer-3.png" alt="类详细信息">&lt;/p>
&lt;hr>
&lt;p>原文：&lt;a href="https://www.itophub.io/wiki/page?id=3_2_0:admin:browsing_the_data_model">https://www.itophub.io/wiki/page?id=3_2_0:admin:browsing_the_data_model&lt;/a>&lt;/p>
&lt;p>2024/09/10 10:25 by127.0.0.1&lt;/p>
&lt;p>版本：3_2_0/admin/browsing_the_data_model.txt · Last modified: 2024/09/10 10:25 by 127.0.0.1&lt;/p></description></item><item><title>Docs: 使用 iTop</title><link>/docs/admin/using_itop/</link><pubDate>Fri, 27 Jun 2025 00:00:00 +0000</pubDate><guid>/docs/admin/using_itop/</guid><description>
&lt;div class="pageinfo pageinfo-primary">
&lt;p>本文档介绍如何使用 iTop 应用程序，包括登录方法和主界面导航。更多详细内容请参考 &lt;a href="https://www.itophub.io/wiki/page?id=3_2_0:admin:using_itop">iTop 官方文档&lt;/a>。&lt;/p>
&lt;/div>
&lt;h2 id="连接到-itop">连接到 iTop&lt;/h2>
&lt;p>要访问 iTop，只需将 Web 浏览器指向安装 iTop 的 URL。例如：&lt;code>http://yourserver/&amp;lt;itop_alias&amp;gt;&lt;/code>&lt;/p>
&lt;p>出现提示时，输入您的登录名和密码。&lt;/p>
&lt;p>认证后，用户将访问 iTop 主页面。用户首次连接时会显示 &amp;ldquo;欢迎使用 iTop&amp;rdquo; 弹出窗口。可以通过取消勾选 &amp;ldquo;启动时显示此消息&amp;rdquo; 来在下次不再显示此弹出窗口。&lt;/p>
&lt;h2 id="在-itop-中导航">在 iTop 中导航&lt;/h2>
&lt;p>iTop 的主界面如下：&lt;/p>
&lt;p>主页面分为三个主要部分：&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>左侧菜单&lt;/strong>（也称为资源管理器菜单）包含访问不同模块（CMDB、事件、变更、服务和合同）的链接。显示的列表取决于已安装的模块和当前用户的权限。例如，&amp;ldquo;管理工具&amp;rdquo; 菜单（底部）仅对管理员可见。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>右侧内容面板&lt;/strong> 显示搜索结果列表或某个给定项目的详细信息。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>顶部框架&lt;/strong> 包含全局搜索、仪表板菜单（当显示的页面是可编辑仪表板时）以及注销菜单，也用于管理用户偏好设置。&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>有关如何使用 iTop 各种功能的详细信息，请参阅用户指南。&lt;/p>
&lt;hr>
&lt;p>原文：&lt;a href="https://www.itophub.io/wiki/page?id=3_2_0:admin:using_itop">https://www.itophub.io/wiki/page?id=3_2_0:admin:using_itop&lt;/a>&lt;/p>
&lt;p>版本：3_2_0/admin/using_itop.txt · Last modified: 2024/09/10 10:25 by 127.0.0.1&lt;/p></description></item><item><title>Docs: 通用配置</title><link>/docs/admin/06-configuration_editor/</link><pubDate>Thu, 26 Jun 2025 00:00:00 +0000</pubDate><guid>/docs/admin/06-configuration_editor/</guid><description>
&lt;div class="pageinfo pageinfo-primary">
&lt;p>新手应阅读配置概述。&lt;/p>
&lt;/div>
&lt;h2 id="在线编辑器">在线编辑器&lt;/h2>
&lt;p>此工具&lt;strong>仅对 iTop 管理员可用&lt;/strong>。它是编辑配置文件 &lt;code>&amp;lt;itop-root&amp;gt;/conf/production/config-itop&lt;/code> 的快捷方式。此工具还通过确保如果发现任何语法错误，则不会保存更改来保护过程。&lt;/p>
&lt;p>可禁用编辑器：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-php" data-lang="php">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&amp;#39;itop-config&amp;#39;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#204a87;font-weight:bold">array&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#39;config_editor&amp;#39;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;disabled&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>编辑器可从&amp;quot;管理工具 / 配置&amp;quot;菜单访问：&lt;/p>
&lt;p>它有语法高亮显示和一些功能。&lt;/p>
&lt;p>以下是可能的操作：&lt;/p>
&lt;ul>
&lt;li>使用 Ctrl+F 查找&lt;/li>
&lt;li>使用 Ctrl+H 查找和替换&lt;/li>
&lt;li>使用&amp;quot;应用&amp;quot;按钮或 Ctrl+S 快捷键保存&lt;/li>
&lt;li>&amp;ldquo;重置&amp;quot;按钮重新加载页面，并将配置恢复到其持久状态（丢弃未持久化的更改）&lt;/li>
&lt;/ul>
&lt;p>如果发现语法错误，则无法保存，并在每个相关行上显示注释：&lt;/p>
&lt;p>保存后，如果没有遇到语法错误，则会显示绿色横幅：&lt;/p>
&lt;hr>
&lt;p>原文：&lt;a href="https://www.itophub.io/wiki/page?id=3_2_0:admin:configuration_editor">https://www.itophub.io/wiki/page?id=3_2_0:admin:configuration_editor&lt;/a>&lt;/p>
&lt;p>2024/09/10 10:25 by127.0.0.1&lt;/p>
&lt;p>版本：3_2_0/admin/configuration_editor.txt · Last modified: 2024/09/10 10:25 by 127.0.0.1&lt;/p></description></item><item><title>Docs: 同步数据源</title><link>/docs/admin/synchronize-data/</link><pubDate>Fri, 27 Jun 2025 00:00:00 +0000</pubDate><guid>/docs/admin/synchronize-data/</guid><description>
&lt;div class="pageinfo pageinfo-primary">
&lt;p>如果您不熟悉此概念，请先阅读概述。&lt;/p>
&lt;ul>
&lt;li>想查看示例&lt;/li>
&lt;li>想深入了解以排除常见问题&lt;/li>
&lt;/ul>
&lt;/div>
&lt;h2 id="数据源定义">数据源定义&lt;/h2>
&lt;p>数据源使用菜单&amp;quot;管理工具 / 同步数据源&amp;quot;定义。&lt;/p>
&lt;p>每个数据源定义：&lt;/p>
&lt;ul>
&lt;li>要同步的对象的&lt;strong>目标类&lt;/strong>&lt;/li>
&lt;li>要同步的对象的&lt;strong>属性/字段列表&lt;/strong>&lt;/li>
&lt;li>如何&lt;strong>搜索/协调对象&lt;/strong>与 iTop 中已存在的对象&lt;/li>
&lt;li>同步/更新以及可能删除 iTop 中对象的规则&lt;/li>
&lt;li>同步对象对 iTop 最终用户的&lt;strong>行为&lt;/strong>方式（哪些字段是只读的，用户是否允许删除对象&amp;hellip;）&lt;/li>
&lt;li>一个可选的超链接和图标，用于将 iTop 用户指向外部应用中的相应对象&lt;/li>
&lt;/ul>
&lt;h3 id="描述">描述&lt;/h3>
&lt;p>&amp;ldquo;属性&amp;quot;部分的此部分定义此同步数据源的一些通用参数。&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>属性&lt;/th>
&lt;th>必填？&lt;/th>
&lt;th>含义&lt;/th>
&lt;th>示例值&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>名称&lt;/td>
&lt;td>必填&lt;/td>
&lt;td>引用此数据源的名称&lt;/td>
&lt;td>来自 SCCS 的服务器同步&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>描述&lt;/td>
&lt;td>可选&lt;/td>
&lt;td>附加描述，仅供参考&lt;/td>
&lt;td>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>状态&lt;/td>
&lt;td>必填&lt;/td>
&lt;td>实现、生产或废弃：用于过滤/分类数据源&lt;/td>
&lt;td>生产&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>目标类&lt;/td>
&lt;td>必填&lt;/td>
&lt;td>要同步的对象类&lt;/td>
&lt;td>服务器&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>用户&lt;/td>
&lt;td>必填&lt;/td>
&lt;td>允许执行此同步的用户&lt;/td>
&lt;td>admin&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>通知联系人&lt;/td>
&lt;td>可选&lt;/td>
&lt;td>当同步执行并包含至少一个错误时，通过邮件通知的联系人&lt;/td>
&lt;td>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>图标超链接&lt;/td>
&lt;td>可选&lt;/td>
&lt;td>代表此数据源的图像的超链接（URL）。此图标显示在 iTop 中同步对象标题旁边&amp;quot;锁定&amp;quot;符号的工具提示中，代替默认图标&lt;/td>
&lt;td>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>应用超链接&lt;/td>
&lt;td>可选&lt;/td>
&lt;td>同步数据来源的远程应用的超链接（URL）。超链接可以包含占位符，如 &lt;code>$this-&amp;gt;attcode$&lt;/code>（将被当前对象的属性值替换）或 &lt;code>$replica-&amp;gt;column_name$&lt;/code>（将被副本中命名列的值替换）&lt;/td>
&lt;td>&lt;a href="https://myapp.acme.com/display/server/$replica-%3Eprimary_key$">https://myapp.acme.com/display/server/$replica-&amp;gt;primary_key$&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>数据表&lt;/td>
&lt;td>可选&lt;/td>
&lt;td>存储副本信息的 MySQL 表名称。如果省略，系统将为您生成一个唯一名称&lt;/td>
&lt;td>synchro_data_servers_from_sccs&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="搜索与协调">搜索与协调&lt;/h3>
&lt;p>属性的此部分定义：&lt;/p>
&lt;ul>
&lt;li>副本表中的信息如何与 iTop 数据库的内容匹配&lt;/li>
&lt;li>此同步数据源关于创建新 iTop 对象的行为。&lt;/li>
&lt;/ul>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>属性&lt;/th>
&lt;th>含义&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>协调策略&lt;/td>
&lt;td>使用属性：创建新副本时，系统将基于标记为&amp;quot;是&amp;quot;的同步属性列表中设置了协调标志的属性，在 iTop 中搜索匹配对象。使用主键：副本的 primary_key 列应包含 iTop 中对象的标识符。&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>零匹配操作&lt;/td>
&lt;td>当协调在 iTop 中未找到任何对象时做什么。创建：指示系统创建目标类的新对象。错误：将导致系统将此情况报告为错误（即此同步数据源应仅更新现有对象）。&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>单匹配操作&lt;/td>
&lt;td>当协调在 iTop 中恰好找到一个匹配对象时做什么。更新：指示系统更新此对象。错误：将导致系统将此情况报告为错误（即此同步数据源应创建对象且从不更新现有对象）。&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>多匹配操作&lt;/td>
&lt;td>当协调在 iTop 中找到多个匹配对象时做什么。创建：指示系统创建另一个对象。错误：将导致系统将此情况报告为错误。取第一个：指示系统选择列表中的第一个对象并更新它。&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="删除规则">删除规则&lt;/h3>
&lt;p>此部分定义如何处理同步对象的删除：&lt;/p>
&lt;ul>
&lt;li>由 iTop 中的最终用户删除&lt;/li>
&lt;li>由同步系统本身删除&lt;/li>
&lt;/ul>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>属性&lt;/th>
&lt;th>含义&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>用户允许&lt;/td>
&lt;td>哪些最终用户被允许在 iTop 中删除同步对象。无人：当对象被同步时，没有人被允许在 iTop 中删除它，只有同步系统可以删除它。仅管理员：仅管理员被允许删除同步对象。允许删除此类对象的每个人：正常的访问规则适用于此类同步对象。&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>完整加载间隔&lt;/td>
&lt;td>两次被认为是已加载（触及）所有副本的同步执行之间的持续时间。当副本超过此持续时间未被触及时，它被视为过时。&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>删除策略&lt;/td>
&lt;td>当副本变为过时时的操作。忽略：什么都不做，关联对象保持原样。删除：在 iTop 中删除关联对象（以及数据表中的副本）。更新：按照更新规则更新关联对象。更新后删除：按照更新规则更新关联对象，然后在保留持续时间后删除对象（和副本）。&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>更新规则&lt;/td>
&lt;td>以分号分隔的值列表，形式为 attribute_code:value，以指定关联对象的哪个属性设置为哪个值。例如：status:obsolete;description:no longer synchronized。&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>保留持续时间&lt;/td>
&lt;td>仅当删除策略设置为&amp;quot;更新后删除&amp;quot;时使用。在这种情况下，从源中删除的对象会立即更新，并仅在保留持续时间后从 iTop 中删除。&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>如果您设置完整加载间隔为 7 天，保留持续时间为 14 天，则不再由源提供的对象将在 3 周后被删除。&lt;/p>
&lt;h3 id="属性">属性&lt;/h3>
&lt;p>&amp;ldquo;属性&amp;quot;选项卡定义：&lt;/p>
&lt;ul>
&lt;li>如何确定是否必须在 iTop 中创建新对象，或者是否必须将现有对象与副本关联（如果属性中的协调规则为&amp;quot;使用属性&amp;rdquo;）&lt;/li>
&lt;li>关联对象的哪些属性必须更新，以及如何更新。&lt;/li>
&lt;/ul>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>属性选项卡&lt;/th>
&lt;th>目的&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>属性&lt;/td>
&lt;td>自动列出数据同步&amp;quot;目标类&amp;quot;的每个属性，及其标签和代码&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>协调&lt;/td>
&lt;td>指定此列中的值是否应用于检索现有 iTop 对象。仅用于新副本&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>更新&lt;/td>
&lt;td>指定该 iTop 对象属性是否应由数据同步更新&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>更新策略&lt;/td>
&lt;td>指定该属性是否可以在 iTop 中编辑&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>协调键&lt;/td>
&lt;td>仅对外部键属性需要。指定用于检索远程对象的&lt;strong>一个&lt;/strong>属性。可以是 id 或作为远程类的唯一标识符的字段&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h4 id="协调列">协调列&lt;/h4>
&lt;p>当新记录出现在 synchro_data_xxx 表中时，同步机制将尝试将此记录与现有 iTop 对象关联。如果一个或多个属性在&amp;quot;协调？&amp;ldquo;列中标记为&amp;quot;是&amp;rdquo;，则这些列/属性将用于搜索匹配所有这些值的 iTop 对象。如果找到一个对象，它将成为与此记录关联。如果未找到对象，则将创建新的 iTop 对象。&lt;/p>
&lt;h4 id="更新列">更新列&lt;/h4>
&lt;p>更新列定义是否必须更新属性。&lt;/p>
&lt;ul>
&lt;li>选中 = 是：属性将被设置/更新&lt;/li>
&lt;li>未选中 = 否：此属性的外部源信息将被忽略，iTop 对象上的现有值将保持原样&lt;/li>
&lt;li>Null =&amp;gt; 保持现有 iTop 字段值不变&lt;/li>
&lt;li>空字符串 =&amp;gt; 重置 iTop 对象字段&lt;/li>
&lt;/ul>
&lt;p>您必须使用自己的填充机制将 Null 值加载到 synchro_data_xxx 表中，因为 synchro_import.php 无法做到这一点。&lt;/p>
&lt;h4 id="更新策略列">更新策略列&lt;/h4>
&lt;p>更新策略列定义编辑 iTop 对象时更新属性的行为。可能的值：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>锁定&lt;/strong>：属性将完全由数据同步驱动，在 iTop 用户界面中显示为只读（旁边有一个小锁图标）&lt;/li>
&lt;li>&lt;strong>解锁&lt;/strong>：属性将由同步更新（每当源数据更改时），但最终用户仍可以在 iTop 中并行修改该属性&lt;/li>
&lt;li>&lt;strong>为空时初始化&lt;/strong>：同步仅当 iTop 中该属性的值为空时才设置值。该属性在 iTop 中保持可修改。&lt;/li>
&lt;/ul>
&lt;h4 id="协调键列">协调键列&lt;/h4>
&lt;p>最后，协调键列定义如何处理引用另一个 iTop 对象的属性（即外键）。提供的数据可以包含外键的实际值（id）或另一个属性，例如对象的名称；该属性必须唯一标识对象。&lt;/p>
&lt;h3 id="状态">状态&lt;/h3>
&lt;p>&amp;ldquo;状态&amp;quot;选项卡显示有关同步执行的信息。如果同步从未运行，该选项卡显示以下消息：&lt;/p>
&lt;pre tabindex="0">&lt;code>This synchro was never run. No log yet.
&lt;/code>&lt;/pre>&lt;p>否则，该选项卡显示类似于下图的架构：&lt;/p>
&lt;h4 id="同步历史">同步历史&lt;/h4>
&lt;p>在屏幕左侧，每次同步执行都显示在历史列表中，显示整体状态、执行的开始日期和时间。&lt;/p>
&lt;p>点击此列表中的元素以在右侧两列中显示相应的状态详情。&lt;/p>
&lt;p>左列显示 synchro_data_xxxx 表中记录的状态：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>新&lt;/strong>记录是自上次执行同步以来添加到表中的记录&lt;/li>
&lt;li>&lt;strong>现有&lt;/strong>记录是在上次同步之前存在并且自上次同步以来已再次加载的记录&lt;/li>
&lt;li>&lt;strong>消失&lt;/strong>记录是自超过 full_load_interval 持续时间以来未被加载的记录&lt;/li>
&lt;li>&lt;strong>忽略&lt;/strong>记录对应于 iTop 中不再存在的对象&lt;/li>
&lt;/ul>
&lt;p>右列显示同步的后果，即对 iTop 中关联对象的修改：&lt;/p>
&lt;ul>
&lt;li>对于每个&lt;strong>新&lt;/strong>记录，后果可以是：在 iTop 中创建新对象（已创建）、更新 iTop 中已存在的对象（已更新）、与 iTop 中已是最新的对象简单关联（未更改），或尝试在 iTop 中创建或更新对象时出错（最可能是因为数据不一致）。&lt;/li>
&lt;li>对于每个&lt;strong>现有&lt;/strong>记录，后果可以是：更新关联对象（已更新）、完全没有更改（未更改），或尝试更新关联对象时出错（错误）。&lt;/li>
&lt;li>对于每个&lt;strong>消失&lt;/strong>记录，后果（取决于&amp;quot;删除规则&amp;rdquo;）可以是：iTop 中的关联对象已删除（已删除）、iTop 中的关联对象已更新（已更新）、iTop 中的关联对象保持不变（无操作），或尝试在 iTop 中更新或删除关联对象时出错（错误）。&lt;/li>
&lt;/ul>
&lt;h3 id="副本">副本&lt;/h3>
&lt;p>在 iTop 中，副本用于存储状态信息以及 synchro_data_xxx 表中加载的原始数据与关联 iTop 对象之间的关系。&lt;/p>
&lt;p>可以通过点击状态选项卡顶部的链接来显示给定数据同步源的副本。副本显示如下：&lt;/p>
&lt;p>副本的内容对于理解数据同步机制的行为（以及获取有关错误的更多信息）很有用，但其数据由同步维护，不应手动修改。&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>副本字段&lt;/th>
&lt;th>目的&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>同步数据源&lt;/td>
&lt;td>此副本所属的同步数据源&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>目标对象（ID）&lt;/td>
&lt;td>与此副本对应的 iTop 对象 id。当副本是新的并且由于错误而无法同步时，可以为空&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>目标类型&lt;/td>
&lt;td>同步数据源的目标类，也是目标对象的类&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>状态&lt;/td>
&lt;td>副本的状态：已修改、新建、过时、孤立、已同步&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>最后看到&lt;/td>
&lt;td>该副本在源数据中上次看到的时间（相同的 primary_key）&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>对象已创建？&lt;/td>
&lt;td>数据同步是否创建了 iTop 对象？&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>最后错误&lt;/td>
&lt;td>错误&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>警告&lt;/td>
&lt;td>发生某些非阻塞错误时的警告消息&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>创建日期&lt;/td>
&lt;td>同步数据创建 iTop 对象的时间&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>最后修改日期&lt;/td>
&lt;td>源上次修改该副本的时间&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>副本状态&lt;/th>
&lt;th>含义&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>新建&lt;/td>
&lt;td>新收到的副本。syncho_exec.php 发生之前的临时状态，用于创建 iTop 对象&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>已修改&lt;/td>
&lt;td>修改的副本。syncho_exec.php 发生之前的临时状态，用于更新 iTop 对象&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>已同步&lt;/td>
&lt;td>副本和 iTop 对象已对齐&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>过时&lt;/td>
&lt;td>数据不再在源中，iTop 对象未被删除，否则副本也会被删除&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>孤立&lt;/td>
&lt;td>这不应发生。在这种情况下，同步的 iTop 对象已消失，但未同时删除副本。此类副本可以安全地手动删除&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="使用-mysql-语句填充-synchro_data_xxxx-表">使用 MySQL 语句填充 synchro_data_xxxx 表&lt;/h2>
&lt;p>如果您使用 SQL 命令（通过 ETL 或自制脚本）填充 synchro_data_xxx 表，您必须注意永远不要创建重复记录。请记住，synchro_data_xxx 表中的每条记录恰好对应 iTop 中的一个对象。&lt;/p>
&lt;p>为了避免此类重复，您必须首先查询现有记录，然后再将新记录插入表中。为了加速此查询，您可以构造一个唯一标识&amp;quot;源&amp;quot;对象的值，并将此值存储在表的 &amp;ldquo;primary_key&amp;rdquo; 列中（该列具有唯一索引），或者使用记录列的任何组合并更改 synchro_data_xxxx 表的定义以添加您自己的索引。&lt;/p>
&lt;p>然后通过执行页面 &amp;ldquo;synchro/synchro_exec.php&amp;rdquo; 来触发 iTop 对象与临时表副本之间的数据同步执行，可以在命令行模式下，或通过调用网页（例如使用 wget）。&lt;/p>
&lt;h2 id="使用-synchro_import-填充-synchro_data_xxxx-表">使用 synchro_import 填充 synchro_data_xxxx 表&lt;/h2>
&lt;p>请参阅：synchro_import.php&lt;/p>
&lt;h2 id="如何指定相关对象列表链接集">如何指定相关对象列表（链接集）&lt;/h2>
&lt;p>某些类具有称为链接集的属性。例如：UserLocal.profile_list&lt;/p>
&lt;p>您可以通过在相应列中写入所有信息来同步这些列表：&lt;/p>
&lt;p>以下示例指定登录将具有一个配置文件：&amp;lsquo;Portal User&amp;rsquo;&lt;/p>
&lt;pre tabindex="0">&lt;code>INSERT login, profile_list INTO data_synchro_userlocal_1 VALUES (&amp;#39;johndoe&amp;#39;, &amp;#39;profileid-&amp;gt;name:Portal User;reason:Customer&amp;#39;)...;
&lt;/code>&lt;/pre>&lt;p>您还可以指定多个链接（多个配置文件）。&lt;/p>
&lt;p>有关更多信息，请参阅导入链接集。&lt;/p>
&lt;h2 id="故障排除">故障排除&lt;/h2>
&lt;p>数据同步故障排除&lt;/p>
&lt;hr>
&lt;p>原文：&lt;a href="https://www.itophub.io/wiki/page?id=3_2_0:advancedtopics:data_synchronization">https://www.itophub.io/wiki/page?id=3_2_0:advancedtopics:data_synchronization&lt;/a>&lt;/p>
&lt;p>版本：3_2_0/advancedtopics/data_synchronization.txt · Last modified: 2024/10/28 12:21 by 127.0.0.1&lt;/p></description></item><item><title>Docs: 通知</title><link>/docs/admin/10-notifications/</link><pubDate>Fri, 27 Jun 2025 00:00:00 +0000</pubDate><guid>/docs/admin/10-notifications/</guid><description>
&lt;div class="pageinfo pageinfo-primary">
&lt;p>iTop 集成了与对象生命周期关联的通知系统。这允许管理员在给定类的对象进入或离开指定状态、创建新对象、从门户更新对象或达到某些阈值时定义邮件通知规则。&lt;/p>
&lt;p>通知机制分为两部分：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>触发器&lt;/strong>定义何时必须发送通知。例如：当工单达到&amp;quot;已分配&amp;quot;状态时。&lt;/li>
&lt;li>&lt;strong>操作&lt;/strong>定义将做什么。可用的操作包括：发送邮件、发送内部新闻、激活 Webhook。&lt;/li>
&lt;/ul>
&lt;p>对于给定的触发器，可以定义多个要执行的操作及其顺序。此外，一个操作可以由多个触发器执行。&lt;/p>
&lt;/div>
&lt;h2 id="管理通知">管理通知&lt;/h2>
&lt;p>使用&amp;quot;管理工具&amp;quot;菜单中的&amp;quot;通知&amp;quot;链接来管理触发器和操作：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>触发器&lt;/strong>选项卡显示所有已创建的触发器，并允许创建新触发器。&lt;/li>
&lt;li>&lt;strong>邮件操作&lt;/strong>选项卡显示邮件通知、请求审批邮件通知（由扩展 Approval process automation 引入）、未认证表单邮件通知（由扩展 Follow-up forms 引入）、纯文本邮件通知（由扩展 Plain text emails 引入）。&lt;/li>
&lt;li>&lt;strong>Webhook 操作&lt;/strong>选项卡显示通用 Webhook 通知、iTop REST API 通知、Slack 通知、Rocket.Chat 通知、Google Chat 通知、Microsoft Teams 通知。&lt;/li>
&lt;li>&lt;strong>其他操作&lt;/strong>选项卡显示新闻中心通知、日历邀请通知（由扩展 Calendar invitations 引入）、SMS 通知（由扩展 Sms Notifications 引入）。&lt;/li>
&lt;/ul>
&lt;h2 id="创建邮件通知">创建邮件通知&lt;/h2>
&lt;p>在创建有用的触发器之前，必须至少定义一个操作。邮件操作是格式化要发送消息的模板，定义消息的内容以及主题、发件人和收件人。&lt;/p>
&lt;p>要创建新操作，请转到&amp;quot;操作&amp;quot;选项卡并点击&amp;quot;新建&amp;hellip;&amp;quot;。&lt;/p>
&lt;p>邮件操作的必填字段：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>名称&lt;/strong>：此操作的标识符，以便检索它。&lt;/li>
&lt;li>&lt;strong>主题&lt;/strong>：消息的主题。可以使用占位符动态构建，如下所述。&lt;/li>
&lt;li>&lt;strong>正文&lt;/strong>：消息的正文。可以使用占位符动态构建。默认情况下，iTop 以 MIME 类型 text/html 发送所有邮件正文。&lt;/li>
&lt;li>&lt;strong>发件人（邮箱）&lt;/strong>：静态邮箱地址或占位符，如 &lt;code>$this-&amp;gt;agent_id-&amp;gt;email$&lt;/code>。请注意，某些邮件服务器会在&amp;quot;发件人&amp;quot;地址无效时拒绝消息。&lt;/li>
&lt;li>&lt;strong>发件人（标签）&lt;/strong>：静态标签或占位符，如 &lt;code>$this-&amp;gt;agent_id-&amp;gt;friendlyname$&lt;/code>。&lt;/li>
&lt;/ul>
&lt;p>必须至少指定以下 3 个用于邮件收件人的字段之一：&lt;strong>收件人（To）&lt;/strong>、&lt;strong>抄送（Cc）&lt;/strong> 或 &lt;strong>密送（Bcc）&lt;/strong>。&lt;/p>
&lt;p>其他字段：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>描述&lt;/strong>：用于标识邮件操作目的的自由文本。不随邮件发送。&lt;/li>
&lt;li>&lt;strong>状态&lt;/strong>：
&lt;ul>
&lt;li>&lt;strong>生产中&lt;/strong>：邮件发送给通过 To、Cc 和 Bcc 检索到的人员&lt;/li>
&lt;li>&lt;strong>测试中&lt;/strong>：邮件发送给&lt;strong>测试收件人&lt;/strong>邮箱地址&lt;/li>
&lt;li>&lt;strong>非活跃&lt;/strong>：不发送邮件&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>语言&lt;/strong>：用于生成邮件中插入的占位符的语言。这主要影响枚举的标签（如工单状态）以及日期和时间格式。&lt;/li>
&lt;li>&lt;strong>HTML 模板&lt;/strong>：包含 HTML 模板的文件，用于将邮件包装在漂亮的格式中。上传的 HTML 文件可以包含所有常用占位符，以及一个特定的 &lt;code>$content$&lt;/code> 占位符，指示 Body 内容应插入的区域。&lt;/li>
&lt;li>&lt;strong>测试收件人&lt;/strong>：当状态为&lt;strong>测试中&lt;/strong>时，用于替代 To、Cc 和 Bcc 的邮箱地址&lt;/li>
&lt;li>&lt;strong>回复至（邮箱）&lt;/strong>：静态邮箱地址或占位符，如 &lt;code>$this-&amp;gt;team_id-&amp;gt;email$&lt;/code>。这是邮件消息的标准属性。当用户在邮件客户端中执行&amp;quot;回复&amp;quot;时，邮件工具会自动将其用作地址。如果省略，则使用发件人地址。&lt;/li>
&lt;li>&lt;strong>回复至（标签）&lt;/strong>：静态标签或占位符，如 &lt;code>$this-&amp;gt;team_id-&amp;gt;friendlyname$&lt;/code>。这是邮件消息的标准属性。当用户在邮件客户端中执行&amp;quot;回复&amp;quot;时，邮件工具会自动将其用作标签。如果省略，则使用发件人标签。&lt;/li>
&lt;li>&lt;strong>忽略通知标志&lt;/strong>：是否在确定要通知的联系人列表时考虑联系人上的&amp;quot;通知&amp;quot;标志。当此字段设置为&amp;quot;是&amp;quot;时，要通知的联系人列表完全由 OQL 表达式指定。如果设置为&amp;quot;否&amp;quot;，则会自动向 OQL 表达式添加条件，以排除&amp;quot;通知标志&amp;quot;设置为&amp;quot;否&amp;quot;的联系人。&lt;/li>
&lt;/ul>
&lt;h3 id="定义收件人">定义收件人&lt;/h3>
&lt;p>&amp;ldquo;收件人&amp;rdquo;、&amp;ldquo;抄送&amp;quot;和&amp;quot;密送&amp;quot;中要通知的联系人由 OQL 查询定义。这允许指定多个通知收件人，例如&amp;quot;附加到工单的所有联系人&amp;quot;或&amp;quot;受影响站点上的所有联系人&amp;rdquo;。&lt;/p>
&lt;h4 id="使用预定义查询">使用预定义查询&lt;/h4>
&lt;p>定义谁将接收这些通知的最简单方法是使用放大镜图标检索查询并选择适当的查询。&lt;/p>
&lt;p>它会将相应的 OQL 复制到字段中。您可以为每个字段选择不同的预定义查询：&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>场景&lt;/th>
&lt;th>OQL 示例&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>收件人（To）中填入工单报告人&lt;/td>
&lt;td>&lt;code>SELECT Person WHERE id = :this-&amp;gt;caller_id&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>抄送（Cc）中填入关联到工单的联系人&lt;/td>
&lt;td>&lt;code>SELECT Contact JOIN lnkContactToTicket AS L ON L.contact_id = Contact.id WHERE L.ticket_id = :this-&amp;gt;id&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>密送（Bcc）中填入工单分配到的团队成员&lt;/td>
&lt;td>&lt;code>SELECT Person AS P JOIN lnkPersonToTeam AS L ON L.person_id=P.id WHERE L.team_id = :this-&amp;gt;team_id&lt;/code>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>可以根据需要修改查询。&lt;/p>
&lt;h4 id="编写自己的查询">编写自己的查询&lt;/h4>
&lt;p>您可以从头开始编写自己的查询并进行测试：有关编写 OQL 查询的更多信息，请参阅 &lt;a href="https://www.itophub.io/wiki/page?id=3_2_0:oql:start">OQL 文档&lt;/a>。&lt;/p>
&lt;p>此 OQL 查询必须返回包含&lt;strong>单个&lt;/strong>邮箱属性的对象列表，即：&lt;/p>
&lt;ul>
&lt;li>Contact&lt;/li>
&lt;li>Person&lt;/li>
&lt;li>Team&lt;/li>
&lt;/ul>
&lt;p>例如，要通知所有姓名以 John 开头的人员，收件人字段可以包含：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sql" data-lang="sql">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">SELECT&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">Person&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">WHERE&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">name&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">LIKE&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#4e9a06">&amp;#39;John%&amp;#39;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>要通知所有附加到工单所影响 CI 的人员，使用：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sql" data-lang="sql">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">SELECT&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">Person&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">AS&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">P&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">JOIN&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">lnkContactToFunctionalCI&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">AS&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">L1&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">ON&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">L1&lt;/span>&lt;span style="color:#000;font-weight:bold">.&lt;/span>&lt;span style="color:#000">contact_id&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">P&lt;/span>&lt;span style="color:#000;font-weight:bold">.&lt;/span>&lt;span style="color:#000">id&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">JOIN&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">FunctionalCI&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">AS&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">CI&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">ON&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">L1&lt;/span>&lt;span style="color:#000;font-weight:bold">.&lt;/span>&lt;span style="color:#000">functionalci_id&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">CI&lt;/span>&lt;span style="color:#000;font-weight:bold">.&lt;/span>&lt;span style="color:#000">id&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">JOIN&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">lnkFunctionalCIToTicket&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">AS&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">L2&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">ON&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">L2&lt;/span>&lt;span style="color:#000;font-weight:bold">.&lt;/span>&lt;span style="color:#000">functionalci_id&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">CI&lt;/span>&lt;span style="color:#000;font-weight:bold">.&lt;/span>&lt;span style="color:#000">id&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">WHERE&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">L2&lt;/span>&lt;span style="color:#000;font-weight:bold">.&lt;/span>&lt;span style="color:#000">ticket_id&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#000">this&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">-&amp;gt;&lt;/span>&lt;span style="color:#000">id&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>自 iTop 3.1.0 起，可以通过将该操作的&amp;quot;忽略通知标志&amp;quot;字段设置为&amp;quot;否&amp;quot;来实现相同的结果。&lt;/p>
&lt;h4 id="使用占位符">使用占位符&lt;/h4>
&lt;p>查询可以包含引用以下内容的占位符：&lt;/p>
&lt;ul>
&lt;li>正在发送通知的&lt;strong>当前对象&lt;/strong>。语法为 &lt;code>:this-&amp;gt;attribute&lt;/code>。&lt;/li>
&lt;li>在事件起源处执行操作的&lt;strong>当前联系人&lt;/strong>。语法为 &lt;code>:current_contact-&amp;gt;attribute&lt;/code>。&lt;/li>
&lt;/ul>
&lt;p>例如，仅当代理没有自己触发事件时才向他发送通知，收件人字段将包含：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sql" data-lang="sql">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">SELECT&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">Person&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">WHERE&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">id&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#000">this&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">-&amp;gt;&lt;/span>&lt;span style="color:#000">agent_id&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">AND&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">id&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">!=&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#000">current_contact&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">-&amp;gt;&lt;/span>&lt;span style="color:#000">id&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>此语法也适用：&lt;code>:current_contact_id&lt;/code>，等同于 &lt;code>:current_contact-&amp;gt;id&lt;/code>。&lt;/p>
&lt;h3 id="消息内容和占位符">消息内容和占位符&lt;/h3>
&lt;p>消息正文使用所见即所得的 HTML 编辑器编辑。&lt;/p>
&lt;p>自 iTop 3.1.0 起，您还可以上传自己的 HTML 模板用于邮件。HTML 模板和正文字段可以通过在 HTML 模板中插入 &lt;code>$content$&lt;/code> 占位符来组合。正文字段的内容将替换 &lt;code>$content$&lt;/code> 占位符。&lt;/p>
&lt;p>&amp;ldquo;主题&amp;quot;和&amp;quot;正文&amp;quot;部分可以通过使用占位符动态构建。此类占位符的语法为 &lt;code>$xxxx$&lt;/code>。&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>占位符使用位置&lt;/th>
&lt;th>语法差异&lt;/th>
&lt;th>示例&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>收件人查询（TO、CC、BCC&amp;hellip;）&lt;/td>
&lt;td>在 OQL 中，占位符以冒号开头&lt;/td>
&lt;td>例如 &lt;code>:current_contact-&amp;gt;friendlyname&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>消息部分（主题、正文）&lt;/td>
&lt;td>在 HTML 文本中，占位符以 $ 开头和结尾&lt;/td>
&lt;td>例如 &lt;code>$current_contact-&amp;gt;friendlyname$&lt;/code>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>占位符有几种类型：&lt;/p>
&lt;ul>
&lt;li>&lt;code>$CONSTANT$&lt;/code> 指命名常量的固定值。&lt;/li>
&lt;li>&lt;code>$this-&amp;gt;function()$&lt;/code> 指在当前触发操作的对象上下文中执行的内置函数。&lt;/li>
&lt;li>&lt;code>$this-&amp;gt;attribute$&lt;/code> 指触发操作的对象的字段属性。&lt;/li>
&lt;li>&lt;code>$this-&amp;gt;attribute_external_key-&amp;gt;attribute$&lt;/code> 指由 attribute_external_key 指向的对象的字段属性，而 attribute_external_key 本身是触发操作的对象的字段。&lt;/li>
&lt;li>&lt;code>$this-&amp;gt;representation(attribute)$&lt;/code> 指触发操作的对象的字段属性的内置表示。例如：&lt;code>$this-&amp;gt;html(name)$&lt;/code>。&lt;/li>
&lt;li>特定的 &lt;code>$content$&lt;/code> 占位符&lt;strong>只能在 HTML 模板内&lt;/strong>使用，以指示在生成邮件时 Body 应插入的位置。&lt;/li>
&lt;/ul>
&lt;p>有关这些各种占位符类型的详细信息，请查看&lt;a href="./placeholders/">占位符文档&lt;/a>。&lt;/p>
&lt;h3 id="测试通知">测试通知&lt;/h3>
&lt;p>要测试新操作，可以使用状态&amp;quot;测试中&amp;quot;并用测试地址填写&amp;quot;测试收件人&amp;rdquo;。在这种情况下，通知将发送到此测试地址。测试完成后，将状态更改为&amp;quot;生产中&amp;quot;，使通知流向实际收件人。&lt;/p>
&lt;p>如果要停用某个操作，只需将其状态设置为&amp;quot;非活跃&amp;quot;。&lt;/p>
&lt;h3 id="配置通知-css">配置通知 CSS&lt;/h3>
&lt;p>iTop 配置中有一个变量 &lt;code>email_css&lt;/code>，允许重载邮件通知使用的默认 CSS。&lt;/p>
&lt;h2 id="创建新闻通知">创建新闻通知&lt;/h2>
&lt;p>负责配置 iTop 通知的用户可以创建新的&amp;quot;新闻中心通知&amp;quot;操作，这与&amp;quot;邮件通知&amp;quot;非常相似：&lt;/p>
&lt;h3 id="字段差异">字段差异&lt;/h3>
&lt;ul>
&lt;li>&lt;strong>标题&lt;/strong>：文本信息。这是用户将看到的主要信息。使用与邮件标题相同的逻辑是有意义的。&lt;/li>
&lt;li>&lt;strong>描述&lt;/strong>：不是 HTML，而是使用 Markdown 格式，因此使用返回文本值的占位符。&lt;/li>
&lt;li>&lt;strong>优先级&lt;/strong>：定义新闻向用户显示的顺序，以及用于区分它们的有色圆点。&lt;/li>
&lt;li>&lt;strong>图标&lt;/strong>：如果未设置，则自动使用触发该新闻的类的图标。&lt;/li>
&lt;li>此类操作触发时，会为每个用户生成一个通知（而邮件操作生成单个邮件通知）。&lt;/li>
&lt;/ul>
&lt;h3 id="收件人">收件人&lt;/h3>
&lt;ul>
&lt;li>&lt;strong>收件人&lt;/strong>：必须是返回 Person 对象的 OQL 查询。&lt;/li>
&lt;li>可以使用 OQL 占位符，如 &lt;code>:this-&amp;gt;caller_id&lt;/code>。&lt;/li>
&lt;li>尽管 Person 存在于 iTop 中，但如果该 Person 未链接到任何&lt;strong>活动&lt;/strong>用户，则不会生成新闻。&lt;/li>
&lt;li>如果此活动用户无权访问 iTop 后台，则无法看到新闻。&lt;/li>
&lt;/ul>
&lt;h4 id="一个-person-对应多个用户">一个 Person 对应多个用户&lt;/h4>
&lt;p>如果一个 Person 链接到多个用户：&lt;/p>
&lt;ul>
&lt;li>所有用户都会看到新闻并可以管理它们，但新闻属于该 Person，因此如果一个用户将其标记为已读，则对其他用户也是已读；如果一个用户删除新闻，则对该 Person 的所有用户都删除。&lt;/li>
&lt;li>订阅和取消订阅频道可以由任何用户执行，但这适用于链接到该 Person 的所有用户。&lt;/li>
&lt;/ul>
&lt;h3 id="测试模式">测试模式&lt;/h3>
&lt;ul>
&lt;li>在测试模式下，新闻是为在&lt;strong>测试收件人&lt;/strong>中选择的 Person 生成的，无论其是否有关联用户。因此，如果忘记为该 Person 创建用户，可以在之后创建，新闻仍然会存在。&lt;/li>
&lt;/ul>
&lt;h2 id="创建触发器">创建触发器&lt;/h2>
&lt;p>要创建新触发器，请在&amp;quot;触发器&amp;quot;选项卡中给定类别的操作下拉列表中点击&amp;quot;新建&amp;quot;。&lt;/p>
&lt;p>必须选择要创建的触发器类型：&lt;/p>
&lt;ul>
&lt;li>当对象进入给定状态时 = 触发器（进入状态时）&lt;/li>
&lt;li>当对象离开给定状态时 = 触发器（离开状态时）&lt;/li>
&lt;li>当创建新对象时 = 触发器（对象创建时）&lt;/li>
&lt;li>当删除对象时 = 触发器（对象删除时）&lt;/li>
&lt;li>当在日志中提及对象时 = 触发器（对象提及时）&lt;/li>
&lt;li>当修改对象时 = 触发器（对象更新时）&lt;/li>
&lt;li>当下载附件时 = 触发器（对象附件下载时）&lt;/li>
&lt;li>当下载文档时 = 触发器（对象文档下载时）&lt;/li>
&lt;li>当达到解决时间（TTR）或拥有时间（TTO）的给定阈值时 = 触发器（阈值时）&lt;/li>
&lt;li>当工单需要审批时 = 触发器（请求审批时）（由扩展 Approval process automation 引入）&lt;/li>
&lt;li>当在控制台中更新日志时 = 触发器（日志更新时）（由扩展 Email Reply 引入）&lt;/li>
&lt;li>当通过邮件更新日志时 = 触发器（通过邮件更新时）（由扩展 Ticket Creation from eMails 引入）&lt;/li>
&lt;li>当从 iTop 门户更新对象时 = 触发器（从门户更新时）&lt;/li>
&lt;/ul>
&lt;p>更多触发器可以由其他扩展添加。例如：Notify On Expiration &amp;amp; Send updates by email。&lt;/p>
&lt;h3 id="通用字段">通用字段&lt;/h3>
&lt;p>任何类型的触发器都需要指定三个参数：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>描述&lt;/strong>：留给您进一步标识此触发器的目的。&lt;/li>
&lt;li>&lt;strong>目标类&lt;/strong>：定义此触发器适用的对象类。&lt;/li>
&lt;li>&lt;strong>过滤器&lt;/strong>：限制触发器适用的对象。它是一个 OQL 查询，返回所有将激活触发器的对象。留空表示：目标类的所有对象。&lt;/li>
&lt;/ul>
&lt;h4 id="过滤器">过滤器&lt;/h4>
&lt;p>OQL 过滤器不应引用当前对象，这是无用且无效的。执行 OQL 时，iTop 将检查当前对象是否属于范围。&lt;/p>
&lt;p>示例：由请求人提交的 User Request，其本身属于负责交付该服务子类别工单团队的成员（注意：这是一个非标准数据模型，但有意义！）&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sql" data-lang="sql">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">SELECT&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">UserRequest&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">AS&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">u&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">JOIN&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">ServiceSubcategory&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">AS&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">s&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">ON&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">u&lt;/span>&lt;span style="color:#000;font-weight:bold">.&lt;/span>&lt;span style="color:#000">servicesubcategory_id&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">s&lt;/span>&lt;span style="color:#000;font-weight:bold">.&lt;/span>&lt;span style="color:#000">id&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">JOIN&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">Team&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">AS&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">t&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">ON&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">s&lt;/span>&lt;span style="color:#000;font-weight:bold">.&lt;/span>&lt;span style="color:#000">delivery_team_id&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">t&lt;/span>&lt;span style="color:#000;font-weight:bold">.&lt;/span>&lt;span style="color:#000">id&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">JOIN&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">lnkPersonToTeam&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">AS&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">lnk&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">ON&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">lnk&lt;/span>&lt;span style="color:#000;font-weight:bold">.&lt;/span>&lt;span style="color:#000">team_id&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">t&lt;/span>&lt;span style="color:#000;font-weight:bold">.&lt;/span>&lt;span style="color:#000">id&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">WHERE&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">lnk&lt;/span>&lt;span style="color:#000;font-weight:bold">.&lt;/span>&lt;span style="color:#000">person_id&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#000">this&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">-&amp;gt;&lt;/span>&lt;span style="color:#000">caller_id&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>无需对当前对象添加任何条件。&lt;/p>
&lt;h4 id="上下文">上下文&lt;/h4>
&lt;p>上下文允许您指定触发器应在哪些&lt;strong>上下文&lt;/strong>中激活。&lt;/p>
&lt;ul>
&lt;li>警告：某些上下文在触发器上不可用（无法指定特定的数据同步或特定的 CRON 任务）&lt;/li>
&lt;li>旧版本扩展带来的触发器不会提供上下文。&lt;/li>
&lt;li>对于&lt;strong>阈值&lt;/strong>触发器，上下文是 CRON，所以如果定义了上下文，请确保包含它。&lt;/li>
&lt;li>对于 Email Reply，上下文按扩展设计仅限于 Console。&lt;/li>
&lt;li>对于其他如&amp;quot;Notify on Expiration&amp;quot;，上下文按扩展设计是 CRON。&lt;/li>
&lt;/ul>
&lt;h4 id="订阅策略">订阅策略&lt;/h4>
&lt;ul>
&lt;li>触发器可以定义用户是否允许从所有通信渠道取消订阅、保留至少一个或不允许取消订阅。&lt;/li>
&lt;li>例如&amp;quot;On Mention&amp;quot;触发器通常不应允许完全取消订阅，因为用户会不理解为什么提及从未到达其目标。&lt;/li>
&lt;/ul>
&lt;h4 id="触发的操作">触发的操作&lt;/h4>
&lt;ul>
&lt;li>&amp;ldquo;触发的操作&amp;quot;选项卡定义当此触发器触发时将执行哪些操作。请记住，一个操作可以链接到多个触发器，因此可以重用某些操作。&lt;/li>
&lt;li>&amp;ldquo;顺序&amp;quot;字段确定给定触发器的操作执行顺序（操作按升序启动）。&lt;/li>
&lt;/ul>
&lt;h3 id="对象更新触发器">对象更新触发器&lt;/h3>
&lt;p>此触发器允许指定&lt;strong>目标字段&lt;/strong>。不指定任何字段意味着任何字段更改都会触发触发器。否则，至少有一个指定的字段需要更改才能激活触发器。&lt;/p>
&lt;h3 id="进入离开状态触发器">进入/离开状态触发器&lt;/h3>
&lt;p>这两个触发器都需要&lt;strong>状态&lt;/strong>。要输入的&amp;quot;状态&amp;quot;值是数据模型中定义的状态的内部代码。状态代码可以在&amp;quot;数据模型&amp;quot;的&amp;quot;生命周期&amp;quot;选项卡&amp;quot;转换&amp;quot;部分查看。值代码是括号中列出的值。&lt;/p>
&lt;h3 id="阈值触发器">阈值触发器&lt;/h3>
&lt;p>此触发器需要一个秒表和一个阈值。秒表的期望值是一个属性代码。User Request 和 Incident 工单带有两个秒表：tto 和 ttr。阈值是秒表目标的百分比。使用标准数据模型时，可以使用 75 或 100。&lt;/p>
&lt;h3 id="日志更新时触发器">日志更新时触发器&lt;/h3>
&lt;p>此触发器需要在&lt;strong>类&lt;/strong>上指定日志代码属性。然后，仅当配置了触发器和活动操作时，它会在控制台中编辑该日志时添加一个复选框，允许用户手动禁用通知（如果他们愿意）。&lt;/p>
&lt;h3 id="对象提及时触发器">对象提及时触发器&lt;/h3>
&lt;p>此触发器需要指定&lt;strong>提及过滤器&lt;/strong>，这是一个 OQL 查询，指定可以在特定&lt;strong>目标类&lt;/strong>对象上提及的对象（通常是 Person）。此查询可以使用占位符根据目标类对象的属性限制返回的 Person。&lt;/p>
&lt;h4 id="行为">行为&lt;/h4>
&lt;p>设置此类触发器后，当&lt;strong>编辑日志&lt;/strong>时，如果用户输入特殊字符（Person 默认为 @，在配置文件中定义）后跟几个字符，则 iTop 会搜索匹配输入字符的 Person。返回的 Person 可以由现有的触发器（对象提及时）限制。&lt;/p>
&lt;ul>
&lt;li>触发器必须适用于当前对象类，因此目标类是编辑对象的父类或类本身。&lt;/li>
&lt;li>提及过滤器必须返回 Person（或 Contact 或任何类）&lt;/li>
&lt;li>当有多个适用的触发器（对象提及时）时，iTop 会执行各种提及过滤器的并集&lt;/li>
&lt;li>返回的 Person 数量受配置参数 &lt;code>max_autocomplete_results&lt;/code> 限制&lt;/li>
&lt;li>即使未链接到活动邮件通知，适用的触发器也会被考虑用于过滤 Person&lt;/li>
&lt;/ul>
&lt;p>使用此机制，如果您将 iTop 用作服务提供商，可以避免在属于另一个不相关客户的工单上提及客户联系人。&lt;/p>
&lt;p>当然，相同的行为适用于 Person 以外的其他类，如果配置文件提及其他允许类及其自己的特殊字符。&lt;/p>
&lt;h4 id="配置">配置&lt;/h4>
&lt;p>此触发器有特殊的自动配置：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-php" data-lang="php">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic">// mentions.allowed_classes: 可以通过日志中的自动完成提及的类。
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic">// 数组的键必须是触发自动完成的单个字符，
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic">// 值必须是 DM 类（例如 &amp;#34;@&amp;#34; =&amp;gt; &amp;#34;Person&amp;#34;, &amp;#34;?&amp;#34; =&amp;gt; &amp;#34;FAQ&amp;#34;）
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic">&lt;/span>&lt;span style="color:#4e9a06">&amp;#39;mentions.allowed_classes&amp;#39;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#204a87;font-weight:bold">array&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#39;@&amp;#39;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;Person&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">),&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>在 iTop Setup 过程中，对于每个具有案例日志的类，会自动为此类创建一个触发器（对象提及时）作为目标类。&lt;/p>
&lt;ul>
&lt;li>触发器的范围不受限制。我们认为在该类的日志中提及某人的功能适用于所有对象，但这可以更改。&lt;/li>
&lt;li>提及过滤器设置为检索当前用户组织的任何活动人员。如果目标类有 &lt;code>org_id&lt;/code> 字段，则当前对象的组织的任何活动人员也会被提议。&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sql" data-lang="sql">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">SELECT&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">Person&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">WHERE&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">((&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">`&lt;/span>&lt;span style="color:#000">status&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">`&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#4e9a06">&amp;#39;active&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">)&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">AND&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">((&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">`&lt;/span>&lt;span style="color:#000">org_id&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">`&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#000">current_contact&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">-&amp;gt;&lt;/span>&lt;span style="color:#000">org_id&lt;/span>&lt;span style="color:#000;font-weight:bold">)&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">OR&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">`&lt;/span>&lt;span style="color:#000">org_id&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">`&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#000">this&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">-&amp;gt;&lt;/span>&lt;span style="color:#000">org_id&lt;/span>&lt;span style="color:#000;font-weight:bold">)))&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>每个触发器都链接到一个创建的邮件通知：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>发件人&lt;/strong>：提及该 Person 的人员的邮箱，即当前用户&lt;/li>
&lt;li>&lt;strong>收件人&lt;/strong>：被提及的 Person，可以通过以下方式获取：&lt;code>SELECT Contact WHERE id = :mentioned-&amp;gt;id&lt;/code>&lt;/li>
&lt;li>&lt;strong>主题&lt;/strong>：&amp;ldquo;You have been mentioned in XXXX&amp;rdquo;，XXXX 是在其日志中提及您的对象的名称&lt;/li>
&lt;li>&lt;strong>邮件正文&lt;/strong>：&lt;/li>
&lt;/ul>
&lt;pre tabindex="0">&lt;code>Hello $mentioned-&amp;gt;first_name$,
You have been mentioned by $current_contact-&amp;gt;friendlyname$ in $this-&amp;gt;hyperlink()$
&lt;/code>&lt;/pre>&lt;p>注意占位符 &lt;code>$mentioned-&amp;gt;attribute$&lt;/code> 用于从收件人 Person 获取字段。对于任何消息，您可以使用标准占位符（见下文）。&lt;/p>
&lt;p>当然可以自定义主题和正文，但不建议更改收件人！&lt;/p>
&lt;p>您还可以将此通用通知拆分，为使用它的每个触发器创建一个，以便提供更准确的修改信息，例如最后一个案例日志条目。&lt;/p>
&lt;h3 id="文档下载时触发器">文档下载时触发器&lt;/h3>
&lt;p>当有人在后台或最终用户门户中下载文件属性（例如 Document File 类上的 File）时，触发器（对象文档下载时）被激活。&lt;/p>
&lt;p>此触发器在操作中提供了新的占位符（标准占位符仍然可用）：&lt;/p>
&lt;ul>
&lt;li>&lt;code>$file-&amp;gt;mime_type$&lt;/code>：文件的 MIME 类型（例如 &amp;ldquo;image/png&amp;rdquo;）&lt;/li>
&lt;li>&lt;code>$file-&amp;gt;file_name$&lt;/code>：文件名，按上传时的名称。&lt;/li>
&lt;li>&lt;code>$file-&amp;gt;downloads_count$&lt;/code>：文件被下载的次数。注意这是当前下载之前的计数，因此如果超过阈值，可以挂钩一些检查来阻止它。&lt;/li>
&lt;li>&lt;code>$file-&amp;gt;data$&lt;/code>：文件的二进制内容&lt;/li>
&lt;li>&lt;code>$file-&amp;gt;data_as_base64$&lt;/code>：文件的 Base64 编码内容，对于与其他应用集成很有用&lt;/li>
&lt;/ul>
&lt;h3 id="附件下载时触发器">附件下载时触发器&lt;/h3>
&lt;p>当有人在后台或最终用户门户中下载附件时，触发器（对象附件下载时）被激活。&lt;/p>
&lt;p>此触发器在操作中提供了新的占位符（标准占位符仍然可用）：&lt;/p>
&lt;ul>
&lt;li>&lt;code>$attachment-&amp;gt;xxx$&lt;/code>：与 &lt;code>$this-&amp;gt;xxx$&lt;/code> 相同的可能性，但针对附件本身（&lt;code>$this&lt;/code> 是附件所附加到的对象）&lt;/li>
&lt;li>&lt;code>$attachment-&amp;gt;mime_type$&lt;/code>：文件的 MIME 类型（例如 &amp;ldquo;image/png&amp;rdquo;）&lt;/li>
&lt;li>&lt;code>$attachment-&amp;gt;file_name$&lt;/code>：文件名，按上传时的名称。&lt;/li>
&lt;li>&lt;code>$attachment-&amp;gt;downloads_count$&lt;/code>：文件被下载的次数。注意这是当前下载之前的计数，因此如果超过阈值，可以挂钩一些检查来阻止它。&lt;/li>
&lt;li>&lt;code>$attachment-&amp;gt;data$&lt;/code>：文件的二进制内容&lt;/li>
&lt;li>&lt;code>$attachment-&amp;gt;data_as_base64$&lt;/code>：文件的 Base64 编码内容，对于与其他应用集成很有用&lt;/li>
&lt;/ul>
&lt;h2 id="测试触发器">测试触发器&lt;/h2>
&lt;p>您可以在给定工单（User Request、Incident、Change）的详情中的&amp;quot;通知&amp;quot;选项卡中查看已发送的通知。&lt;/p>
&lt;h2 id="邮件发送配置">邮件发送配置&lt;/h2>
&lt;h3 id="通知与应用响应性">通知与应用响应性&lt;/h3>
&lt;p>发送邮件是一个相对较慢的操作。根据您的邮件服务器，发送一封邮件可能需要几秒钟（建立连接、发送数据等&amp;hellip;）。当在 iTop 中创建或更新工单时，根据配置的通知，可能会发出多封邮件。这可能需要几秒钟才能完成。为了提高应用的响应性，通知可以由在 Web 服务器上运行的后台进程异步发送。要激活通知的异步发送，请在配置文件中设置 &lt;code>'email_asynchronous' =&amp;gt; true&lt;/code>，并确保后台进程正在运行。&lt;/p>
&lt;h2 id="通知与对象">通知与对象&lt;/h2>
&lt;p>在触发了通知的 iTop 对象上，您可以在专用选项卡中查看它们。&lt;/p>
&lt;hr>
&lt;p>原文：&lt;a href="https://www.itophub.io/wiki/page?id=3_2_0:admin:notifications">https://www.itophub.io/wiki/page?id=3_2_0:admin:notifications&lt;/a>&lt;/p>
&lt;p>版本：3_2_0/admin/notifications.txt · Last modified: 2026/03/10 13:16 by 127.0.0.1&lt;/p></description></item><item><title>Docs: 数据库完整性</title><link>/docs/admin/11-database-tools/</link><pubDate>Fri, 27 Jun 2025 00:00:00 +0000</pubDate><guid>/docs/admin/11-database-tools/</guid><description>
&lt;div class="pageinfo pageinfo-primary">
&lt;p>此菜单提供一些简单的数据库完整性检查。&lt;/p>
&lt;/div>
&lt;h2 id="数据库不一致">数据库不一致&lt;/h2>
&lt;p>提供多种显示模式：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>错误列表&lt;/strong>：仅显示数据库不一致项&lt;/li>
&lt;li>&lt;strong>详细视图&lt;/strong>：生成 ID 列表以便生成 SQL SELECT&lt;/li>
&lt;li>&lt;strong>报告&lt;/strong>：生成所有不一致项并允许用户将结果下载为 zip 文件&lt;/li>
&lt;/ul>
&lt;h2 id="丢失附件">丢失附件&lt;/h2>
&lt;p>您可以在此处搜索数据库中丢失或放错位置的附件。&lt;strong>这不是数据恢复工具，它不会检索已删除的数据。&lt;/strong>&lt;/p>
&lt;hr>
&lt;p>原文：&lt;a href="https://www.itophub.io/wiki/page?id=3_2_0:admin:database-tools">https://www.itophub.io/wiki/page?id=3_2_0:admin:database-tools&lt;/a>&lt;/p>
&lt;p>Last modified: 2024/09/10 10:25 by127.0.0.1&lt;/p>
&lt;p>版本：3_2_0/admin/database-tools.txt · Last modified: 2024/09/10 10:25 by 127.0.0.1&lt;/p></description></item><item><title>Docs: 数据备份</title><link>/docs/admin/12-backup/</link><pubDate>Fri, 27 Jun 2025 00:00:00 +0000</pubDate><guid>/docs/admin/12-backup/</guid><description>
&lt;div class="pageinfo pageinfo-primary">
&lt;p>在 iTop 中，所有数据（包括上传的文档）都存储在 MySQL 数据库中。因此，强烈建议定期备份数据库！&lt;/p>
&lt;/div>
&lt;h2 id="itop-备份包含什么">iTop 备份包含什么？&lt;/h2>
&lt;p>备份是一个 zip 文件，包含恢复应用所需的所有数据：&lt;/p>
&lt;ul>
&lt;li>配置（即配置文件 &lt;code>itop-config.php&lt;/code>）&lt;/li>
&lt;li>数据（即 MySQL 数据库的完整转储）&lt;/li>
&lt;li>.xml delta 文件 — 适用于使用 ITSM Designer 自定义实例的 Combodo 客户&lt;/li>
&lt;li>从 iTop Hub 和 ITSM Designer 部署的扩展模块&lt;/li>
&lt;/ul>
&lt;p>注意：&lt;/p>
&lt;ul>
&lt;li>如果在运行备份后安装了新模块，恢复备份等同于卸载这些模块。
&lt;ul>
&lt;li>对于通过 iTop Hub 安装的模块，请从 Hub 重新推送它们。&lt;/li>
&lt;li>对于通过 ITSM Designer 安装的模块，请连接到 ITSM Designer 并再次运行 Move To Production。&lt;/li>
&lt;li>对于通过 &amp;ldquo;extensions&amp;rdquo; 文件夹安装的模块，如果希望将模块重新安装到 iTop 中，请再次运行 setup。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>如果自备份以来升级了 iTop 或添加了新模块，请注意恢复可能会导致数据库与代码库不一致。恢复后，iTop 可能无法工作。建议运行 Setup 以将数据库与 iTop 数据模型对齐（由新 iTop 版本或最近添加的扩展带来的）。&lt;/li>
&lt;/ul>
&lt;h2 id="限制">限制&lt;/h2>
&lt;p>备份需要 PHP 的 &lt;code>exec&lt;/code> 函数可用。对于超过 68 GB 的大型数据库，建议直接使用 &lt;code>mysqldump&lt;/code> 进行备份。&lt;/p>
&lt;h2 id="gui-备份">GUI 备份&lt;/h2>
&lt;p>自 iTop 2.1.0 起，管理员可以使用特殊的&amp;quot;备份&amp;quot;菜单：&lt;/p>
&lt;p>此管理页面提醒您当前设置，并列出备份文件：&lt;/p>
&lt;p>&amp;ldquo;计划备份&amp;quot;指由后台任务生成的备份。更多详细信息请参阅下面的专用章节。&lt;/p>
&lt;p>点击&amp;quot;立即备份！&amp;ldquo;按钮执行备份（无需确认）：&lt;/p>
&lt;h2 id="备份后台任务">备份后台任务&lt;/h2>
&lt;h3 id="配置">配置&lt;/h3>
&lt;p>可以在 iTop 配置文件的 &lt;code>itop-backup&lt;/code> 部分中调整自动备份方案：&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>参数&lt;/th>
&lt;th>类型&lt;/th>
&lt;th>描述&lt;/th>
&lt;th>默认值&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>mysql_bindir&lt;/td>
&lt;td>string&lt;/td>
&lt;td>如果不在 &amp;ldquo;path&amp;rdquo; 中，MySQL 二进制文件的目录。用于计划备份和 REST 服务的默认值&lt;/td>
&lt;td>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>week_days&lt;/td>
&lt;td>string&lt;/td>
&lt;td>必须执行自动备份的星期几（小写）CSV 列表&lt;/td>
&lt;td>monday, tuesday, wednesday, thursday, friday&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>time&lt;/td>
&lt;td>string&lt;/td>
&lt;td>必须执行自动备份的 24 小时制时间&lt;/td>
&lt;td>23:30&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>retention_count&lt;/td>
&lt;td>int&lt;/td>
&lt;td>目标目录中保留的备份文件数量&lt;/td>
&lt;td>5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>enabled&lt;/td>
&lt;td>bool&lt;/td>
&lt;td>打开/关闭自动备份&lt;/td>
&lt;td>true&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>file_name_format&lt;/td>
&lt;td>string&lt;/td>
&lt;td>备份名称（zip），仅用于计划备份。支持以下占位符：&lt;strong>HOST&lt;/strong>、&lt;strong>DB&lt;/strong>、&lt;strong>SUBNAME&lt;/strong>。可以基于 PHP/strftime 规范提供时间信息&lt;/td>
&lt;td>&lt;strong>DB&lt;/strong>-%Y-%m-%d_%H_%M&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>itop_backup_incident&lt;/td>
&lt;td>string&lt;/td>
&lt;td>iTop 的 URL。如果备份失败，则在此 iTop 中创建工单。（此参数在 2.5.2+ 中称为 itop_root）&lt;/td>
&lt;td>如果为空或没有参数，则使用当前 iTop APP_ROOT&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>extra_files&lt;/td>
&lt;td>array&lt;/td>
&lt;td>（自 3.1 / bug N°6133 起）要通过 CLI 脚本备份/恢复的附加文件/文件夹路径列表&lt;/td>
&lt;td>如果为空，备份归档包含常用文件（conf/dump/&amp;hellip;）&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>备份概览页面不会告知您备份是否完全禁用。&lt;/p>
&lt;h2 id="cli-脚本">CLI 脚本&lt;/h2>
&lt;h3 id="cli-备份">CLI 备份&lt;/h3>
&lt;p>您可以使用以下命令生成备份：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>php datamodels/2.x/itop-backup/backup.php --auth_user&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&amp;lt;LOGIN&amp;gt; --auth_pwd&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&amp;lt;PASSWORD&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="cli-备份配置文件推荐">CLI 备份配置文件（推荐）&lt;/h4>
&lt;p>可以将 param_file 作为参数传递给 backup.php 脚本。例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>php datamodels/2.x/itop-backup/backup.php --param_file&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&amp;lt;此文件&amp;gt;&lt;span style="color:#ce5c00;font-weight:bold">[&lt;/span>,&amp;lt;另一个文件&amp;gt;&lt;span style="color:#ce5c00;font-weight:bold">]&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>示例参数文件与模块捆绑在一起：&lt;code>datamodels/2.x/itop-backup/backup.params.distrib&lt;/code>&lt;/p>
&lt;p>所有这些参数都可以在命令中或 param_file 中传递。如果未指定 &lt;code>mysql_bindir&lt;/code> 参数（无论是在命令行还是在 param_file 中），则将使用 iTop 配置文件参数。&lt;/p>
&lt;h3 id="cli-检查备份脚本">CLI 检查备份脚本&lt;/h3>
&lt;p>此脚本也与模块捆绑在一起：&lt;code>datamodels/2.x/itop-backup/check-backup.php&lt;/code>。&lt;/p>
&lt;p>这是一个监控工具，必须在 backup.php 之后执行。&lt;/p>
&lt;p>它将：&lt;/p>
&lt;ul>
&lt;li>验证生成的备份文件是否按文件名规范存在&lt;/li>
&lt;li>旨在检测文件大小的可疑变化&lt;/li>
&lt;li>如果存在 &lt;code>itop_backup_incident&lt;/code> 和 &lt;code>check_ticket_*&lt;/code> 参数，则备份失败时会在本地或远程 iTop 实例上创建工单&lt;/li>
&lt;/ul>
&lt;h3 id="cli-恢复">CLI 恢复&lt;/h3>
&lt;p>您可以使用以下命令恢复备份：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>php datamodels/2.x/itop-backup/restore.php --auth_user&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&amp;lt;LOGIN&amp;gt; --auth_pwd&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&amp;lt;PASSWORD&amp;gt; --backup_file&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&amp;lt;PATHTOBACKUP&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>恢复操作不会恢复文件权限。您可能需要对以下文件执行 chown（www-data）操作：&lt;/p>
&lt;ul>
&lt;li>conf/production/config.itop.php&lt;/li>
&lt;li>data/production.delta.xml&lt;/li>
&lt;li>data/cache-production&lt;/li>
&lt;li>data/production-modules&lt;/li>
&lt;/ul>
&lt;p>如果数据模型使用可逆加密的密码字段，请确保新系统和旧系统使用相同的加密算法：如果旧系统上存在 mcrypt PHP 扩展，则新系统上也必须存在 mcrypt 扩展。如果 mcrypt 不存在，则也不应存在。&lt;/p>
&lt;p>注意：用户账号密码使用单向加密，不受 mcrypt 存在的影响。&lt;/p>
&lt;h2 id="手动备份使用-mysqldump">手动备份（使用 mysqldump）&lt;/h2>
&lt;p>与以前版本的 iTop 一样，您仍然可以使用 MySQL 附带的 &lt;code>mysqldump&lt;/code> 命令行工具创建自己的备份。&lt;/p>
&lt;p>您可以使用以下 mysqldump 命令运行数据库的完整备份：&lt;/p>
&lt;p>在 Linux 系统上：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>/usr/bin/mysqldump --opt --default-character-set&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>utf8mb4 --single-transaction --add-drop-database --user&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&amp;lt;user&amp;gt; --password&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&amp;lt;password&amp;gt; &amp;lt;DB&amp;gt; &lt;span style="color:#000;font-weight:bold">|&lt;/span> gzip &amp;lt; &amp;lt;file&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>在 Windows 系统上：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>mysqldump.exe --opt --default-character-set&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>utf8mb4 --single-transaction --add-drop-database --user&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&amp;lt;user&amp;gt; --password&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&amp;lt;password&amp;gt; &amp;lt;DB&amp;gt; &amp;gt; &amp;lt;file&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>其中：&lt;/p>
&lt;ul>
&lt;li>&lt;code>&amp;lt;user&amp;gt;&lt;/code>：连接 MySQL 的用户名&lt;/li>
&lt;li>&lt;code>&amp;lt;password&amp;gt;&lt;/code>：对应的密码&lt;/li>
&lt;li>&lt;code>&amp;lt;DB&amp;gt;&lt;/code>：安装 iTop 的数据库名称&lt;/li>
&lt;li>&lt;code>&amp;lt;file&amp;gt;&lt;/code>：要生成的归档文件的名称&lt;/li>
&lt;/ul>
&lt;p>数据库内容转储后，只需归档此转储和文件 &lt;code>conf/production/config-itop.php&lt;/code>，即可保留 iTop 实例的完整映像。&lt;/p>
&lt;ul>
&lt;li>确保以 UTF-8 MB4（&lt;code>--default-character-set=utf8mb4&lt;/code>）导出数据，否则重音字符将丢失。&lt;/li>
&lt;li>选项 &lt;code>--single-transaction&lt;/code> 有两个效果：它生成一致的备份，因为所有表都在一个事务中导出，并且它为错误 1449（定义者不存在）提供了解决方法，如果您导出已从另一个系统重新导入或已由不再存在的用户创建的数据库，则可能会发生此错误。&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>原文：&lt;a href="https://www.itophub.io/wiki/page?id=3_2_0:admin:backup">https://www.itophub.io/wiki/page?id=3_2_0:admin:backup&lt;/a>&lt;/p>
&lt;p>版本：3_2_0/admin/backup.txt · Last modified: 2024/09/10 10:25 by 127.0.0.1&lt;/p></description></item><item><title>Docs: 应用升级</title><link>/docs/admin/13-core-update/</link><pubDate>Fri, 27 Jun 2025 00:00:00 +0000</pubDate><guid>/docs/admin/13-core-update/</guid><description>
&lt;div class="pageinfo pageinfo-primary">
&lt;p>此操作仅限 iTop 管理员，允许从 Web 浏览器升级 iTop 应用代码，无需连接到 iTop 服务器。&lt;/p>
&lt;/div>
&lt;h2 id="补丁">补丁&lt;/h2>
&lt;ul>
&lt;li>Combodo 提供&lt;strong>补丁&lt;/strong>包，只能使用此新功能安装。&lt;/li>
&lt;li>补丁不包含完整的 iTop 包，而仅包含自上一个 iTop 版本（主要或次要）以来更改的文件。&lt;/li>
&lt;li>补丁是一种配方，用于将一个 iTop 版本（源）修改为另一个 iTop 版本（微版本）。补丁的 iTop 源版本可以是主要或次要版本。该源版本是您的 iTop 必须运行的最低版本，才能安装该补丁。安装补丁时，如果补丁不适用于您的 iTop，则会显示错误消息。它不会破坏您的 iTop。&lt;/li>
&lt;li>补丁旨在将您的 iTop 升级到特定的&lt;strong>微版本&lt;/strong>。例如，假设 2.7.0-2 是一个微版本：如果您的 iTop 运行 2.7.0，则可以使用补丁包 &lt;code>Patch-iTop-2.7.0-2.7.0-2.zip&lt;/code> 将其升级到 2.7.0-2。如果您的 iTop 已经运行 2.7.0-1，没问题，可以使用相同的补丁包升级到 2.7.0-2。&lt;/li>
&lt;/ul>
&lt;p>因为它从用户 PC 上传包到服务器，所以 Web 服务器必须允许上传此大小的文件。补丁包比完整包小得多：&lt;/p>
&lt;ul>
&lt;li>iTop 2.7.0 大约 20Mb&lt;/li>
&lt;li>iTop 2.7.0-1 的补丁大约 200Kb&lt;/li>
&lt;/ul>
&lt;h3 id="限制">限制&lt;/h3>
&lt;p>应用升级工具不会添加/删除模块/扩展，因此它&lt;strong>不能正确安装主要 iTop 升级&lt;/strong>。如果误操作，只需运行 Setup 即可恢复情况。但通常，Web 服务器参数 &lt;code>upload_max_filesize&lt;/code> 不够大，无法上传完整的 iTop 包。&lt;/p>
&lt;h2 id="使用">使用&lt;/h2>
&lt;p>点击菜单&lt;strong>系统 / 应用升级&lt;/strong>&lt;/p>
&lt;p>页面将：&lt;/p>
&lt;ul>
&lt;li>执行一些检查&lt;/li>
&lt;li>允许您上传文件，其内容将被检查&lt;/li>
&lt;li>允许您选择备份选项并执行升级&lt;/li>
&lt;/ul>
&lt;p>打开页面时的检查：&lt;/p>
&lt;ul>
&lt;li>Web 用户（您的 Web 服务器使用的用户）必须是所有者，或者必须对 iTop 根目录下的每个文件和目录（包括 iTop 根目录本身）具有&lt;strong>写入&lt;/strong>访问权限。&lt;/li>
&lt;li>它控制 &lt;code>upload_max_filesize&lt;/code>（2 个变量）&lt;/li>
&lt;li>它显示磁盘上的可用空间。&lt;/li>
&lt;/ul>
&lt;p>提供 zip 后的检查：&lt;/p>
&lt;p>提供 zip 后，它会在临时目录中解压包并控制：&lt;/p>
&lt;ul>
&lt;li>它是一个 zip&lt;/li>
&lt;li>zip 对应于已安装的产品（Community、Professional&amp;hellip;）&lt;/li>
&lt;li>zip 符合清单，因此所有存在的文件都具有预期的大小和校验和，与离开 Combodo 工厂时一样&lt;/li>
&lt;li>zip 可以对应于补丁或完整包&lt;/li>
&lt;/ul>
&lt;p>然后：&lt;/p>
&lt;ul>
&lt;li>将 iTop 置于维护模式（停止 cron 并防止用户修改数据）&lt;/li>
&lt;li>执行所需的备份&lt;/li>
&lt;li>从解压的包中复制 iTop 文件&lt;/li>
&lt;li>编译 iTop（生成 env-prod 并更新数据库），与从 iTop Hub 安装或从 ITSM Designer 执行 Move to Production 的行为相同&lt;/li>
&lt;/ul>
&lt;p>如果这还不够，您将不得不手动执行安装过程，无论是新版本还是旧版本，如果您有无法修复的 XML 不兼容性。&lt;/p>
&lt;h2 id="常见问题">常见问题&lt;/h2>
&lt;p>&lt;strong>问：我的 iTop 保持只读？&lt;/strong>&lt;/p>
&lt;p>**答：**如果升级过程在中间崩溃，可能需要手动删除 &lt;code>&amp;lt;itop&amp;gt;/data/.readonly&lt;/code> 和 &lt;code>&amp;lt;itop&amp;gt;/data/.maintenance&lt;/code> 文件。成功的 Setup 会在失败的应用升级后自动删除这些文件。&lt;/p>
&lt;p>&lt;strong>问：我的升级失败但没有错误消息？&lt;/strong>&lt;/p>
&lt;p>**答：**检查 Web 服务器日志以了解原因。我们注意到，在执行备份时，当参数 &lt;code>max_execution_time&lt;/code> 太低时，应用更新可能会失败。由于 iTop 被终止，无法显示任何错误消息。&lt;/p>
&lt;hr>
&lt;p>原文：&lt;a href="https://www.itophub.io/wiki/page?id=3_2_0:admin:core-update">https://www.itophub.io/wiki/page?id=3_2_0:admin:core-update&lt;/a>&lt;/p>
&lt;p>版本：3_2_0/admin/core-update.txt · Last modified: 2024/09/10 10:25 by 127.0.0.1&lt;/p></description></item><item><title>Docs: 新闻中心</title><link>/docs/admin/21-newsroom/</link><pubDate>Fri, 27 Jun 2025 00:00:00 +0000</pubDate><guid>/docs/admin/21-newsroom/</guid><description>
&lt;div class="pageinfo pageinfo-primary">
&lt;p>新闻中心是 iTop 向当前用户显示新闻的地方。这些新闻可能来自各种新闻提供者。&lt;/p>
&lt;ul>
&lt;li>从一开始，&lt;strong>iTop Hub&lt;/strong> 就是一个新闻提供者，向 &lt;strong>iTop 管理员&lt;/strong>发送新闻。&lt;/li>
&lt;li>一些扩展提供者（如 Molkobain）也有自己的新闻提供者，当他的某个扩展部署在该 iTop 上时，向 &lt;strong>iTop 管理员&lt;/strong>发送新闻。&lt;/li>
&lt;li>自 iTop 3.2.0 起，&lt;strong>iTop 本身&lt;/strong>现在是一个新闻提供者，可以使用触发器-动作机制向 &lt;strong>任何后台用户&lt;/strong>发送新闻。&lt;/li>
&lt;/ul>
&lt;p>从用户的角度来看，新闻只是获取有关 iTop 中发生事件的信息的另一种方式。对于整天在 iTop 后台工作的某些用户来说，新闻可以替代电子邮件。&lt;/p>
&lt;/div>
&lt;h2 id="铃铛与新闻">铃铛与新闻&lt;/h2>
&lt;p>新闻可以从左侧菜单栏底部显示的&lt;strong>铃铛&lt;/strong>访问。&lt;/p>
&lt;ul>
&lt;li>当有未读新闻时，铃铛上会显示红色圆点。&lt;/li>
&lt;li>鼠标悬停在铃铛上时，会显示一个工具提示，显示新闻中心中&amp;quot;未读&amp;quot;新闻的数量（如果超过 99 条未读消息，则显示 &amp;ldquo;99&amp;rdquo;）。&lt;/li>
&lt;li>红色圆点和消息数量仅在用户在 iTop 中导航或重新加载当前页面时更新。&lt;/li>
&lt;li>点击此图标会显示一个弹出菜单，其中包含消息。每条消息由一个图标和简短描述组成，实际上是指向更多信息的链接。&lt;/li>
&lt;li>点击其中一条消息会在新标签页/窗口中打开消息的链接，并将消息标记为已读，从而从新闻中心菜单中移除它。&lt;/li>
&lt;/ul>
&lt;h4 id="管理员">管理员&lt;/h4>
&lt;p>iTop 社区管理员将收到来自 2 个不同新闻发布者的新闻。每条消息右侧图标下方的标签提供了消息的来源（iTop Hub、iTop 或其他新闻发布者）。&lt;/p>
&lt;h2 id="查看所有消息">查看所有消息&lt;/h2>
&lt;h3 id="已读未读查看删除">已读、未读、查看、删除&lt;/h3>
&lt;ul>
&lt;li>点击铃铛，可以选择&lt;strong>查看所有消息&lt;/strong>，这会打开一个用户专用页面。&lt;/li>
&lt;li>如果您收到来自不同提供者的新闻（只有 iTop 管理员处于这种情况），则点击新闻提供者名称以查看来自该特定提供者的所有消息。&lt;/li>
&lt;/ul>
&lt;p>在该页面上，您可以：&lt;/p>
&lt;ul>
&lt;li>删除收到的新闻&lt;/li>
&lt;li>将新闻标记为&lt;strong>未读&lt;/strong>，以便保持该状态，因为我们仍然需要回复或处理它&lt;/li>
&lt;li>将新闻标记为已读&lt;/li>
&lt;li>在新的浏览器标签页中打开新闻&lt;/li>
&lt;/ul>
&lt;h3 id="批量管理">批量管理&lt;/h3>
&lt;p>此外，通过更改&amp;quot;选择模式&amp;quot;，用户可以批量执行所有这些操作。&lt;/p>
&lt;h2 id="取消订阅通知">取消订阅通知&lt;/h2>
&lt;p>当用户由于 iTop 中的特定类型事件（iTop 术语中的触发器）而收到新闻和/或邮件时，如果管理员允许此类操作，他现在可以决定取消订阅此类通知。&lt;/p>
&lt;ul>
&lt;li>可以配置特定触发器以向同一组人发送邮件和新闻。&lt;/li>
&lt;li>每个收件人一旦收到至少一条通知，就可以决定取消订阅特定渠道，例如不再接收邮件，但保留新闻。&lt;/li>
&lt;li>如果触发器设置允许，他们甚至可以完全取消订阅，删除所有渠道。&lt;/li>
&lt;/ul>
&lt;p>有 2 个路径可以打开此通知中心页面，要么通过&amp;quot;我的新闻&amp;quot;页面中的右上角图标，要么从用户偏好设置页面中，点击链接。&lt;/p>
&lt;p>最终到达用户专用页面，他们可以在其中管理其通知订阅：&lt;/p>
&lt;ul>
&lt;li>在渠道移除和订阅时提供反馈&lt;/li>
&lt;li>在渠道移除时，当触发器不允许时，会显示通用消息，不太容易与真正原因关联&lt;/li>
&lt;li>配置触发器和操作的人员可以限制用户取消订阅的可能性：对于 On Mention 触发器，我们通常希望拒绝用户从所有渠道取消订阅，他们必须至少保留一个，因此我们确保他们被通知。在某些操作（如 iCalendar 邀请、未认证表单&amp;hellip;）上，根本不允许用户取消订阅。&lt;/li>
&lt;li>用户只能取消订阅他们已经收到至少一条通知事件的操作。&lt;/li>
&lt;li>用户只能取消订阅直接发送到其联系人 Person 的操作（链接到其用户），例如邮件和新闻，而不是 Rocket、Teams 等此类通知渠道。&lt;/li>
&lt;/ul>
&lt;h2 id="配置新闻">配置新闻&lt;/h2>
&lt;p>负责配置 iTop 通知的用户可以创建新的&amp;quot;新闻中心通知&amp;quot;操作，这与&amp;quot;邮件通知&amp;quot;非常相似：&lt;/p>
&lt;p>更多详细信息请参阅&lt;a href="../10-notifications/">通知文档&lt;/a>。&lt;/p>
&lt;h2 id="发送的通知">发送的通知&lt;/h2>
&lt;p>当对象在创建或修改期间生成了通知时，它们会在对象详情的专用选项卡中可见（与以前一样）。这些通知按通知类型分组，标签对齐以便更易于理解。&lt;/p>
&lt;h2 id="新闻管理">新闻管理&lt;/h2>
&lt;h3 id="新闻清理">新闻清理&lt;/h3>
&lt;ul>
&lt;li>有一个后台任务会删除超过配置参数 &lt;code>notifications.itop.read_notification_retention&lt;/code> 的已读新闻。默认值为 182 天。未读新闻永远不会被自动删除。&lt;/li>
&lt;/ul>
&lt;h3 id="禁用新闻">禁用新闻&lt;/h3>
&lt;p>管理员可以通过在 iTop 配置文件中将配置参数 &lt;code>newsroom_enabled&lt;/code> 设置为 false，为所有用户禁用整个新闻中心机制，这将导致：&lt;/p>
&lt;ul>
&lt;li>对所有用户隐藏铃铛&lt;/li>
&lt;li>不会阻止 iTop 创建，如果配置了&amp;quot;新闻中心通知&amp;quot;来生成新闻，但它们对用户来说变得非常难以看到。&lt;/li>
&lt;li>停止所有其他新闻中心提供者从其相应的新闻发布者（iTop Hub、扩展发布者如 TeemIp 或 Molkobain 等）获取新闻。&lt;/li>
&lt;/ul>
&lt;h3 id="其他配置">其他配置&lt;/h3>
&lt;ul>
&lt;li>&lt;code>notifications.itop.newsroom_cache_time&lt;/code>：新闻中心铃铛后面通知消息列表两次刷新之间的持续时间（分钟）。默认值为 5 分钟。
&lt;ul>
&lt;li>如果用户已阅读所有新闻，则刚刚创建的新闻将在不到此延迟的时间内通过在其铃铛上添加红色圆点而对他们可见。&lt;/li>
&lt;li>如果用户按下铃铛，缓存会立即清除，因此他们获得其消息的准确当前情况。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;code>notifications.itop.send_asynchronously&lt;/code>：如果为 true，则 iTop 新闻中心通知将异步发送，除非在特定&amp;quot;新闻中心通知&amp;quot;对象上设置了不同的值。&lt;/li>
&lt;/ul>
&lt;h4 id="用户偏好设置">用户偏好设置&lt;/h4>
&lt;p>用户偏好设置屏幕有一个部分供用户配置与新闻中心相关的一些参数：&lt;/p>
&lt;ul>
&lt;li>已知问题：虽然消息数量似乎可以由每个用户在其&amp;quot;偏好设置&amp;quot;页面中配置，但此设置&lt;strong>不会保存&lt;/strong>。&lt;/li>
&lt;li>每个新闻源可以在同一用户&amp;quot;偏好设置&amp;quot;页面中启用或禁用。社区版本有两个新闻源：iTop Hub、iTop News。但无法一次禁用所有 iTop 发布的新闻，我们已将&amp;quot;显示来自 iTop 的消息&amp;quot;选项灰显。如果用户可以在 On Mention 触发器上将新闻中心选为唯一渠道时禁用来自 iTop 的所有消息，这将违背强制渠道始终有效的目的。如果管理员取消选中&amp;quot;显示来自 iTop Hub 的消息&amp;quot;选项，其效果只会在其下次 iTop 连接时可见。&lt;/li>
&lt;/ul>
&lt;h3 id="itop-hub-新闻提供者">iTop Hub 新闻提供者&lt;/h3>
&lt;hr>
&lt;p>原文：&lt;a href="https://www.itophub.io/wiki/page?id=3_2_0:admin:newsroom">https://www.itophub.io/wiki/page?id=3_2_0:admin:newsroom&lt;/a>&lt;/p>
&lt;p>版本：3_2_0/admin/newsroom.txt · Last modified: 2024/09/10 10:25 by 127.0.0.1&lt;/p></description></item><item><title>Docs: 委派管理员工具</title><link>/docs/admin/delegate-admin-tools/</link><pubDate>Fri, 27 Jun 2025 00:00:00 +0000</pubDate><guid>/docs/admin/delegate-admin-tools/</guid><description>
&lt;div class="pageinfo pageinfo-primary">
&lt;p>先决条件：您必须熟悉教程中使用的语法，并且已经创建了一个扩展。&lt;/p>
&lt;p>自 iTop 2.5 版本起，您可以将管理员菜单&lt;strong>授予管理员以外的用户&lt;/strong>。&lt;/p>
&lt;/div>
&lt;h2 id="限制">限制&lt;/h2>
&lt;p>以下菜单不能授予管理员以外的任何人：&lt;/p>
&lt;ul>
&lt;li>计划备份&lt;/li>
&lt;li>日志管理（除非您有 Log Management 2.0.1+）&lt;/li>
&lt;li>iTop Hub&lt;/li>
&lt;/ul>
&lt;p>某些类（如所有与对象历史相关的类）没有组织，因此，向具有允许组织的用户提供运行查询的访问权限会产生安全漏洞，因为他们可以看到他们无权查看的对象的历史记录。&lt;/p>
&lt;h2 id="菜单可见性">菜单可见性&lt;/h2>
&lt;p>自 XML 1.5 版本起，现在可以基于类和操作权限（读取、写入、删除等）控制对任何菜单的访问。只有对该类具有该操作权限的人才能看到此菜单。&lt;/p>
&lt;p>有关自定义菜单的 XML 标签详细信息，请参阅 XML 参考。&lt;/p>
&lt;p>以下管理员菜单默认由类上的操作控制：&lt;/p>
&lt;ul>
&lt;li>用户：对 User 的写入&lt;/li>
&lt;li>配置文件：对 Profile 的写入&lt;/li>
&lt;li>通知：对 Trigger 的写入&lt;/li>
&lt;li>审计：对 AuditCategory 的写入&lt;/li>
&lt;li>运行查询：对 ResourceRunQueriesMenu 的写入&lt;/li>
&lt;li>查询手册：对 Query 的写入&lt;/li>
&lt;li>导出：对 ResourceAdminMenu 的写入&lt;/li>
&lt;li>数据模型：对 ResourceRunQueriesMenu 的写入&lt;/li>
&lt;li>通用搜索：对 ResourceAdminMenu 的写入&lt;/li>
&lt;li>同步数据源：对 SynchroDataSource 的写入&lt;/li>
&lt;/ul>
&lt;p>上述所有类都可以通过配置文件（通过组）管理其访问权限。开箱即用，有 6 个新的&lt;strong>组&lt;/strong>是预定义的，可以被现有或新的配置文件使用。LogManagement 组由扩展 iTop Log Management 引入。&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>组 ID&lt;/th>
&lt;th>默认包含的菜单&lt;/th>
&lt;th>组中包含的类&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>User&lt;/td>
&lt;td>用户账号、配置文件&lt;/td>
&lt;td>User、URP_UserOrg、URP_UserProfile、URP_Profiles&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Audit&lt;/td>
&lt;td>审计、运行查询&lt;/td>
&lt;td>AuditCategory、AuditRule、ResourceRunQueriesMenu&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Notification&lt;/td>
&lt;td>通知、运行查询&lt;/td>
&lt;td>Trigger、Action、lnkTriggerAction、ResourceRunQueriesMenu&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Query&lt;/td>
&lt;td>查询手册、运行查询&lt;/td>
&lt;td>Query、QueryOQL、ResourceRunQueriesMenu&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>SynchroData&lt;/td>
&lt;td>同步数据源&lt;/td>
&lt;td>SynchroDataSource&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>LogManagement&lt;/td>
&lt;td>日志中心&lt;/td>
&lt;td>ResourceLogMenu&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>AdminTools&lt;/td>
&lt;td>上述所有菜单&lt;/td>
&lt;td>上述所有类&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;ul>
&lt;li>编辑具有管理员配置文件的用户&lt;/li>
&lt;li>将管理员配置文件授予用户&lt;/li>
&lt;/ul>
&lt;h2 id="分步示例">分步示例&lt;/h2>
&lt;p>假设您想让具有&amp;quot;Config Manager&amp;quot;配置文件的用户可以访问&amp;quot;导出菜单&amp;quot;：&lt;/p>
&lt;ul>
&lt;li>没有明显的类来控制此菜单，我们将创建一个新的抽象类，命名为：&amp;lsquo;RessourceExportMenu&amp;rsquo;&lt;/li>
&lt;li>我们将自定义&amp;quot;导出菜单&amp;quot;条目，将其绑定到这个新创建的类（将 &amp;lsquo;ResourceAdminMenu&amp;rsquo; 替换为 &amp;lsquo;RessourceExportMenu&amp;rsquo;）&lt;/li>
&lt;li>我们将自定义&amp;quot;Config Manager&amp;quot;配置文件，通过一个新的组包含对类 &amp;lsquo;RessourceExportMenu&amp;rsquo; 的修改权限&lt;/li>
&lt;/ul>
&lt;h3 id="创建抽象类">创建抽象类&lt;/h3>
&lt;p>您可以使用现有的有意义的类来控制对该菜单的访问，但在&amp;quot;导出&amp;quot;的情况下，我们找不到任何令人满意的类，因此我们将创建一个新类。&lt;/p>
&lt;p>新类必须：&lt;/p>
&lt;ul>
&lt;li>继承 AbstractResource&lt;/li>
&lt;li>具有类别 grant_by_profile&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-xml" data-lang="xml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">&amp;lt;class&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;RessourceExportMenu&amp;#34;&lt;/span> &lt;span style="color:#c4a000">_delta=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;define&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;parent&amp;gt;&lt;/span>AbstractResource&lt;span style="color:#204a87;font-weight:bold">&amp;lt;/parent&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;properties&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;comment&amp;gt;&lt;/span>/* Export Menu access control. */&lt;span style="color:#204a87;font-weight:bold">&amp;lt;/comment&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;abstract&amp;gt;&lt;/span>true&lt;span style="color:#204a87;font-weight:bold">&amp;lt;/abstract&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;category&amp;gt;&lt;/span>grant_by_profile&lt;span style="color:#204a87;font-weight:bold">&amp;lt;/category&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;/properties&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;presentation/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;methods/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">&amp;lt;/class&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="覆盖菜单定义">覆盖菜单定义&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-xml" data-lang="xml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">&amp;lt;menu&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;ExportMenu&amp;#34;&lt;/span> &lt;span style="color:#c4a000">xsi:type=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;WebPageMenuNode&amp;#34;&lt;/span> &lt;span style="color:#c4a000">_delta=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;must_exist&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;enable_class&lt;/span> &lt;span style="color:#c4a000">_delta=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;redefine&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">&amp;gt;&lt;/span>RessourceExportMenu&lt;span style="color:#204a87;font-weight:bold">&amp;lt;/enable_class&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;enable_action&lt;/span> &lt;span style="color:#c4a000">_delta=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;redefine&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">&amp;gt;&lt;/span>UR_ACTION_MODIFY&lt;span style="color:#204a87;font-weight:bold">&amp;lt;/enable_action&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">&amp;lt;/menu&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="完成组和配置文件定义">完成组和配置文件定义&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-xml" data-lang="xml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">&amp;lt;user_rights&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;groups&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;group&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;Export&amp;#34;&lt;/span> &lt;span style="color:#c4a000">_delta=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;define&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;classes&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;class&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;RessourceExportMenu&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;/classes&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;/group&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;/groups&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;profiles&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;profile&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;3&amp;#34;&lt;/span> &lt;span style="color:#c4a000">_delta=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;must_exist&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic">&amp;lt;!-- id=3 对应 Configuration Manager 配置文件 --&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;groups&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;group&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;Export&amp;#34;&lt;/span> &lt;span style="color:#c4a000">_delta=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;define&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;actions&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;action&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;action:write&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">&amp;gt;&lt;/span>allow&lt;span style="color:#204a87;font-weight:bold">&amp;lt;/action&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;/actions&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;/group&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;/groups&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;/profile&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;/profiles&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">&amp;lt;/user_rights&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>在 &lt;code>datamodel.itop-profiles-itil.xml&lt;/code> 中检查现有配置文件的 id。&lt;/p>
&lt;h2 id="可以创建的配置文件">可以创建的配置文件&lt;/h2>
&lt;p>这些配置文件不存在，但您可以创建它们，以便将&amp;quot;管理工具&amp;quot;菜单委派给用户：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-xml" data-lang="xml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">&amp;lt;user_rights&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;profiles&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;profile&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;43&amp;#34;&lt;/span> &lt;span style="color:#c4a000">_delta=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;define&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;name&amp;gt;&lt;/span>User Manager&lt;span style="color:#204a87;font-weight:bold">&amp;lt;/name&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;description&amp;gt;&lt;/span>create/modify/delete users...&lt;span style="color:#204a87;font-weight:bold">&amp;lt;/description&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;groups&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;group&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;User&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;actions&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;action&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;action:write&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">&amp;gt;&lt;/span>allow&lt;span style="color:#204a87;font-weight:bold">&amp;lt;/action&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;action&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;action:delete&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">&amp;gt;&lt;/span>allow&lt;span style="color:#204a87;font-weight:bold">&amp;lt;/action&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;action&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;action:read&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">&amp;gt;&lt;/span>allow&lt;span style="color:#204a87;font-weight:bold">&amp;lt;/action&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;action&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;action:read bulk&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">&amp;gt;&lt;/span>allow&lt;span style="color:#204a87;font-weight:bold">&amp;lt;/action&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;action&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;action:write bulk&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">&amp;gt;&lt;/span>allow&lt;span style="color:#204a87;font-weight:bold">&amp;lt;/action&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;/actions&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;/group&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;/groups&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;/profile&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;profile&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;44&amp;#34;&lt;/span> &lt;span style="color:#c4a000">_delta=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;define&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;name&amp;gt;&lt;/span>Notification Manager&lt;span style="color:#204a87;font-weight:bold">&amp;lt;/name&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;description&amp;gt;&lt;/span>Has the rights to create and modify the triggers and actions&lt;span style="color:#204a87;font-weight:bold">&amp;lt;/description&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;groups&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;group&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;Notification&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;actions&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;action&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;action:write&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">&amp;gt;&lt;/span>allow&lt;span style="color:#204a87;font-weight:bold">&amp;lt;/action&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;action&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;action:delete&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">&amp;gt;&lt;/span>allow&lt;span style="color:#204a87;font-weight:bold">&amp;lt;/action&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;action&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;action:read&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">&amp;gt;&lt;/span>allow&lt;span style="color:#204a87;font-weight:bold">&amp;lt;/action&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;action&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;action:read bulk&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">&amp;gt;&lt;/span>allow&lt;span style="color:#204a87;font-weight:bold">&amp;lt;/action&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;action&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;action:write bulk&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">&amp;gt;&lt;/span>allow&lt;span style="color:#204a87;font-weight:bold">&amp;lt;/action&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;/actions&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;/group&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;/groups&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;/profile&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;profile&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;45&amp;#34;&lt;/span> &lt;span style="color:#c4a000">_delta=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;define&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;name&amp;gt;&lt;/span>Audit Manager&lt;span style="color:#204a87;font-weight:bold">&amp;lt;/name&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;description&amp;gt;&lt;/span>Has the rights to create and modify the audit&lt;span style="color:#204a87;font-weight:bold">&amp;lt;/description&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;groups&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;group&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;Audit&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;actions&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;action&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;action:write&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">&amp;gt;&lt;/span>allow&lt;span style="color:#204a87;font-weight:bold">&amp;lt;/action&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;action&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;action:delete&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">&amp;gt;&lt;/span>allow&lt;span style="color:#204a87;font-weight:bold">&amp;lt;/action&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;action&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;action:read&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">&amp;gt;&lt;/span>allow&lt;span style="color:#204a87;font-weight:bold">&amp;lt;/action&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;action&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;action:read bulk&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">&amp;gt;&lt;/span>allow&lt;span style="color:#204a87;font-weight:bold">&amp;lt;/action&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;action&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;action:write bulk&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">&amp;gt;&lt;/span>allow&lt;span style="color:#204a87;font-weight:bold">&amp;lt;/action&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;/actions&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;/group&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;/groups&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;/profile&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;profile&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;46&amp;#34;&lt;/span> &lt;span style="color:#c4a000">_delta=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;define&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;name&amp;gt;&lt;/span>Query Manager&lt;span style="color:#204a87;font-weight:bold">&amp;lt;/name&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;description&amp;gt;&lt;/span>Has the rights to create and modify the Query Phrasebook&lt;span style="color:#204a87;font-weight:bold">&amp;lt;/description&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;groups&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;group&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;Query&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;actions&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;action&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;action:write&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">&amp;gt;&lt;/span>allow&lt;span style="color:#204a87;font-weight:bold">&amp;lt;/action&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;action&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;action:delete&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">&amp;gt;&lt;/span>allow&lt;span style="color:#204a87;font-weight:bold">&amp;lt;/action&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;action&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;action:read&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">&amp;gt;&lt;/span>allow&lt;span style="color:#204a87;font-weight:bold">&amp;lt;/action&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;action&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;action:read bulk&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">&amp;gt;&lt;/span>allow&lt;span style="color:#204a87;font-weight:bold">&amp;lt;/action&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;action&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;action:write bulk&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">&amp;gt;&lt;/span>allow&lt;span style="color:#204a87;font-weight:bold">&amp;lt;/action&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;/actions&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;/group&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;/groups&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;/profile&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;profile&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;47&amp;#34;&lt;/span> &lt;span style="color:#c4a000">_delta=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;define&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;name&amp;gt;&lt;/span>SynchroData Manager&lt;span style="color:#204a87;font-weight:bold">&amp;lt;/name&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;description&amp;gt;&lt;/span>Has the rights to create and modify the Synchro data source&lt;span style="color:#204a87;font-weight:bold">&amp;lt;/description&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;groups&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;group&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;SynchroData&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;actions&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;action&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;action:write&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">&amp;gt;&lt;/span>allow&lt;span style="color:#204a87;font-weight:bold">&amp;lt;/action&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;action&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;action:delete&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">&amp;gt;&lt;/span>allow&lt;span style="color:#204a87;font-weight:bold">&amp;lt;/action&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;action&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;action:read&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">&amp;gt;&lt;/span>allow&lt;span style="color:#204a87;font-weight:bold">&amp;lt;/action&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;action&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;action:read bulk&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">&amp;gt;&lt;/span>allow&lt;span style="color:#204a87;font-weight:bold">&amp;lt;/action&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;action&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;action:write bulk&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">&amp;gt;&lt;/span>allow&lt;span style="color:#204a87;font-weight:bold">&amp;lt;/action&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;/actions&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;/group&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;/groups&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;/profile&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;profile&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;48&amp;#34;&lt;/span> &lt;span style="color:#c4a000">_delta=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;define&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;name&amp;gt;&lt;/span>Admin Tools Manager&lt;span style="color:#204a87;font-weight:bold">&amp;lt;/name&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;description&amp;gt;&lt;/span>Has the rights to Admin&lt;span style="color:#204a87;font-weight:bold">&amp;lt;/description&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;groups&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;group&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;AdminTools&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;actions&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;action&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;action:write&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">&amp;gt;&lt;/span>allow&lt;span style="color:#204a87;font-weight:bold">&amp;lt;/action&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;action&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;action:delete&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">&amp;gt;&lt;/span>allow&lt;span style="color:#204a87;font-weight:bold">&amp;lt;/action&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;action&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;action:read&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">&amp;gt;&lt;/span>allow&lt;span style="color:#204a87;font-weight:bold">&amp;lt;/action&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;/actions&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;/group&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;/groups&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;/profile&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;/profiles&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">&amp;lt;/user_rights&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="技术细节">技术细节&lt;/h2>
&lt;p>详细解释 2.5 版本围绕菜单访问所做的修改/添加：&lt;/p>
&lt;h3 id="xml-中的管理工具菜单">XML 中的&amp;quot;管理工具&amp;quot;菜单&lt;/h3>
&lt;p>管理员菜单以前完全用纯 PHP 编写，由 &lt;code>isAdministrator()&lt;/code> 检查保护。它已被翻译成 XML，因此现在可以被覆盖。&lt;/p>
&lt;p>菜单 XML 参考已得到丰富，可以指定访问菜单所需的类、操作甚至刺激。&lt;/p>
&lt;p>当标签 &lt;code>enable_admin_only&lt;/code> 设置为 1 时，任何提供的 &lt;code>&amp;lt;enable_class&amp;gt;&lt;/code> 标签都会被忽略：只有具有管理员配置文件的用户才能看到此菜单。如果您想授予对 &lt;code>enable_admin_only&lt;/code> 菜单的访问权限，必须将标签 &lt;code>enable_admin_only&lt;/code> 设置为 0，或使用 &lt;code>_delta=&amp;quot;delete&amp;quot;&lt;/code> 完全删除该标签，并至少添加 &lt;code>enable_class&lt;/code> 和 &lt;code>enable_action&lt;/code> 标签。&lt;/p>
&lt;p>该设计旨在保持与以前版本 iTop 的扩展兼容性。&lt;/p>
&lt;p>WebPageMenuNode 需要针对直接访问进行保护（用户可能猜测网页的 URL 并尝试访问它，即使他没有看到菜单）。为此，每个网页都会检查 &lt;code>ApplicationMenu::CheckMenuIdEnabled(&amp;quot;MenuId&amp;quot;);&lt;/code>，其中 MenuId 是菜单 xml 定义中使用的 id。这确保为了能够执行网页，用户必须有权访问相应的菜单。&lt;/p>
&lt;h3 id="新抽象类">新抽象类&lt;/h3>
&lt;p>某些管理员菜单没有任何逻辑类可以绑定，因此我们创建了专门用于控制此访问的新类。您可以根据需要扩展此列表。&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>类名&lt;/th>
&lt;th>用途&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>AbstractResource&lt;/td>
&lt;td>新的访问权限控制类应继承自 AbstractResource&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>ResourceRunQueriesMenu&lt;/td>
&lt;td>用于检查用户对&amp;quot;运行查询&amp;quot;菜单的访问权限&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>ResourceAdminMenu&lt;/td>
&lt;td>默认用于所有没有适当类的菜单&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h4 id="bizmodel-与-grant_by_profile-类">bizmodel 与 grant_by_profile 类&lt;/h4>
&lt;p>组 * 包含所有具有 bizmodel 类别的类。某些配置文件具有对组 * 的读取访问权限。&lt;/p>
&lt;p>具有类别 grant_by_profile 的类默认对管理员以外的用户不可访问。&lt;/p>
&lt;ul>
&lt;li>用于控制&amp;quot;管理工具&amp;quot;菜单的应用类具有类别 grant_by_profile。&lt;/li>
&lt;li>新的抽象类也具有类别 grant_by_profile。&lt;/li>
&lt;/ul>
&lt;h3 id="授权矩阵中的更改">授权矩阵中的更改&lt;/h3>
&lt;p>授权矩阵显示具有类别 grant_by_profile 或 bizmodel 的类。在 iTop 2.5 之前，只显示具有类别 bizmodel 的类。&lt;/p>
&lt;p>示例：查看具有 User Manager 配置文件的用户的新授权矩阵条目。&lt;/p>
&lt;h3 id="新组">新组&lt;/h3>
&lt;p>以下是 6 个预定义的新组，可以被现有或新的配置文件使用：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-xml" data-lang="xml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">&amp;lt;user_rights&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;group&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;Notification&amp;#34;&lt;/span> &lt;span style="color:#c4a000">_delta=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;define&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;classes&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic">&amp;lt;!-- 此类列表也存在于 AdminTools 组中 --&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;class&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;Trigger&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;class&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;lnkTriggerAction&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;class&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;Action&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;class&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;ResourceRunQueriesMenu&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;/classes&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;/group&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;group&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;User&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;classes&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic">&amp;lt;!-- 此类列表也存在于 AdminTools 组中 --&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;class&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;User&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;class&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;URP_UserOrg&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;class&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;URP_UserProfile&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;class&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;URP_Profiles&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;/classes&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;/group&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;group&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;Audit&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;classes&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic">&amp;lt;!-- 此类列表也存在于 AdminTools 组中 --&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;class&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;AuditCategory&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;class&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;AuditRule&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;class&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;ResourceRunQueriesMenu&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;/classes&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;/group&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;group&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;Query&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;classes&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic">&amp;lt;!-- 此类列表也存在于 AdminTools 组中 --&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;class&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;Query&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;class&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;QueryOQL&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;class&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;ResourceRunQueriesMenu&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;/classes&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;/group&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;group&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;SynchroData&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;classes&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic">&amp;lt;!-- 此类列表也存在于 AdminTools 组中 --&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;class&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;SynchroDataSource&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;class&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;SynchroAttribute&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;class&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;SynchroReplica&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">/&amp;gt;&lt;/span> &lt;span style="color:#8f5902;font-style:italic">&amp;lt;!-- 3.0 新增 --&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;/classes&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;/group&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">&amp;lt;/user_rights&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">&amp;lt;/itop_design&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;p>原文：&lt;a href="https://www.itophub.io/wiki/page?id=3_2_0:customization:delegate_rights">https://www.itophub.io/wiki/page?id=3_2_0:customization:delegate_rights&lt;/a>&lt;/p>
&lt;p>2024/09/10 10:25 by127.0.0.1&lt;/p>
&lt;p>版本：3_2_0/customization/delegate_rights.txt · Last modified: 2024/09/10 10:25 by 127.0.0.1&lt;/p></description></item><item><title>Docs: 设置 iTop 为只读</title><link>/docs/admin/08-settings/</link><pubDate>Thu, 26 Jun 2025 00:00:00 +0000</pubDate><guid>/docs/admin/08-settings/</guid><description>
&lt;div class="pageinfo pageinfo-primary">
&lt;p>所有 iTop 配置设置都存储在 iTop 安装目录下 &lt;code>conf/production&lt;/code> 目录中的 &lt;code>config-itop.php&lt;/code> 文件中。更改参数会立即生效，无需重启 Web 服务器，只需在浏览器中刷新 iTop 页面即可应用新参数。&lt;/p>
&lt;/div>
&lt;h2 id="设置-itop-为只读模式">设置 iTop 为只读模式&lt;/h2>
&lt;p>有时（例如在执行某些维护任务时）希望将 iTop 应用设为只读。自 1.0.2 版本起，可以使用两个参数来控制：&lt;/p>
&lt;ul>
&lt;li>应用是否为只读（以及针对谁）&lt;/li>
&lt;li>应用只读时显示的消息&lt;/li>
&lt;/ul>
&lt;p>这两个参数是 &lt;code>access_mode&lt;/code> 和 &lt;code>access_message&lt;/code>。&lt;/p>
&lt;p>&lt;code>access_mode&lt;/code> 参数可以取以下值之一：&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>access_mode 值&lt;/th>
&lt;th>实际值&lt;/th>
&lt;th>效果&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>ACCESS_READONLY&lt;/td>
&lt;td>0&lt;/td>
&lt;td>应用对所有用户只读。用户可以浏览应用，但不会有任何数据写入 MySQL 数据库。&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>ACCESS_ADMIN_WRITE&lt;/td>
&lt;td>2&lt;/td>
&lt;td>只有管理员用户可以写入数据库。对于其他所有用户，应用处于只读模式。&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>ACCESS_FULL&lt;/td>
&lt;td>3&lt;/td>
&lt;td>所有用户都可以写入数据库。这是默认模式。&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>示例：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-php" data-lang="php">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&amp;#39;access_mode&amp;#39;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#000">ACCESS_ADMIN_WRITE&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&amp;#39;access_message&amp;#39;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;(maintenance until 2PM)&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这在 iTop 中会显示如下效果：&lt;/p>
&lt;h2 id="从不同的-url-访问-itop">从不同的 URL 访问 iTop&lt;/h2>
&lt;p>在某些情况下，从不同的 URL 访问同一个 iTop 实例可能很有用。（例如，公司内部用户从内部网访问，客户从互联网访问）。&lt;/p>
&lt;p>一种可能性是安装两个指向同一数据库的 iTop 实例。这样可以对所有参数进行完全控制，但会增加维护工作量，以保持两个实例同步（相同版本的 iTop、一致的参数&amp;hellip;）。&lt;/p>
&lt;p>另一种可能性是在配置文件中放置一些代码，根据某些服务器参数调整设置。由于配置文件是在每个&amp;quot;页面&amp;quot;加载（即执行）的 PHP 文件，因此设置可以完全动态。&lt;/p>
&lt;p>例如，假设有一个反向代理控制对 iTop 的访问，并且希望所有互联网用户使用 HTTPS（安全）访问 iTop，而内部网用户通过 HTTP（更快）连接。可以执行以下操作：&lt;/p>
&lt;ul>
&lt;li>从互联网：添加规则将所有 HTTP 流量重定向到 HTTPS；在 HTTPS 虚拟主机配置中添加特定标头：
&lt;ul>
&lt;li>Apache：&lt;code>RequestHeader set HTTPS On&lt;/code>&lt;/li>
&lt;li>NGINX：&lt;code>proxy_set_header HTTPS On;&lt;/code>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>从内部网：添加规则将所有 HTTPS 流量重定向到 HTTP&lt;/li>
&lt;/ul>
&lt;p>在配置文件中为 &lt;code>app_root_url&lt;/code> 设置以下值：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-php" data-lang="php">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&amp;#39;app_root_url&amp;#39;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#000">isset&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#000">$_SERVER&lt;/span>&lt;span style="color:#000;font-weight:bold">[&lt;/span>&lt;span style="color:#4e9a06">&amp;#39;HTTP_HTTPS&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">])&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">&amp;amp;&amp;amp;&lt;/span> &lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#000">$_SERVER&lt;/span>&lt;span style="color:#000;font-weight:bold">[&lt;/span>&lt;span style="color:#4e9a06">&amp;#39;HTTP_HTTPS&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">]&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">==&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;On&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">))&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">?&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;https://itop.yourdomain/&amp;#39;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;http://itop.yourdomain/&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>其他组合也是可能的：在 PHP 中，&lt;code>$_SERVER&lt;/code> 和 &lt;code>$_COOKIES&lt;/code> 变量是可访问的。&lt;/p>
&lt;p>例如：如果您可以从 &lt;code>https://itop.company.com/itop&lt;/code> 或 &lt;code>https://public-itop.company.com/itop&lt;/code> 访问 iTop，可以在配置文件中放入以下 PHP 代码：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-php" data-lang="php">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&amp;#39;app_root_url&amp;#39;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;https://&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#000">isset&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#000">$_SERVER&lt;/span>&lt;span style="color:#000;font-weight:bold">[&lt;/span>&lt;span style="color:#4e9a06">&amp;#39;HTTP_HOST&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">])&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">?&lt;/span> &lt;span style="color:#000">$_SERVER&lt;/span>&lt;span style="color:#000;font-weight:bold">[&lt;/span>&lt;span style="color:#4e9a06">&amp;#39;HTTP_HOST&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">]&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;itop.company.com&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#4e9a06">&amp;#39;/itop&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="常见问题">常见问题&lt;/h2>
&lt;p>&lt;strong>问：Setup 永远不会结束，而且我在层级中有很多对象？&lt;/strong>&lt;/p>
&lt;p>**答：**这两个症状很可能是相关的。在 Setup 时，iTop 会重新计算层级键，以防它们被破坏。目前还不清楚这种情况是否经常发生，只要速度快就不是大问题，但也可能慢到永远结束。&lt;/p>
&lt;p>在这种情况下，只需在 &lt;code>&amp;lt;my-itop&amp;gt;/data/&lt;/code> 下添加一个空文件 &lt;code>.setup-rebuild-hkeys-never&lt;/code>，以指定 Setup 跳过层级键的重建。从 3.0 开始，您可以从&amp;quot;数据库完整性&amp;quot;菜单中测试和修复层级键问题。&lt;/p>
&lt;hr>
&lt;p>原文：&lt;a href="https://www.itophub.io/wiki/page?id=3_2_0:admin:settings">https://www.itophub.io/wiki/page?id=3_2_0:admin:settings&lt;/a>&lt;/p>
&lt;p>版本：3_2_0/admin/settings.txt · Last modified: 2024/09/10 10:25 by 127.0.0.1&lt;/p></description></item><item><title>Docs: 防止并发修改</title><link>/docs/admin/09-locking/</link><pubDate>Thu, 26 Jun 2025 00:00:00 +0000</pubDate><guid>/docs/admin/09-locking/</guid><description>
&lt;div class="pageinfo pageinfo-primary">
&lt;p>为了防止对同一对象的并发修改导致意外结果，iTop（从 2.2.0 版本开始）实现了锁定机制。&lt;/p>
&lt;/div>
&lt;h2 id="原理和限制">原理和限制&lt;/h2>
&lt;p>该机制旨在保护同一对象的并发&lt;strong>交互式修改&lt;/strong>，无论是由两个不同用户还是由同一用户在浏览器的两个不同标签页中进行。&lt;/p>
&lt;p>该机制&lt;strong>不&lt;/strong>阻止在后台进行批量修改（批量修改、CSV 导入、数据同步&amp;hellip;）。它仅防止两个交互式用户相互覆盖对方的修改。&lt;/p>
&lt;p>在浏览器崩溃或连接丢失的情况下，每个锁都有一个过期延迟（可配置，默认 120 秒）。&lt;/p>
&lt;p>在不太可能发生的情况下，用户获取了对象的锁但离开了，浏览器仍处于活动状态（去吃午饭了！），具有特定配置文件（可配置列表）的管理员可以&amp;quot;终止&amp;quot;该锁，让另一个用户获取对象的所有权并进行修改。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-php" data-lang="php">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&amp;#39;concurrent_lock_enabled&amp;#39;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#204a87;font-weight:bold">true&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="用户界面">用户界面&lt;/h2>
&lt;p>在对象&amp;quot;详情&amp;quot;页面的顶部，当对象正在被另一个用户修改时，会显示警告消息：&lt;/p>
&lt;p>消息中指示了正在编辑对象的用户标识符（登录名）和名称。如果您需要编辑该对象，可以等待该人完成修改（按&amp;quot;刷新&amp;quot;图标更新对象状态）或联系该人了解发生了什么。当对象被&amp;quot;锁定&amp;quot;时，所有修改对象的操作都被禁用。&amp;ldquo;操作&amp;quot;菜单中唯一剩余的操作是导出。&lt;/p>
&lt;p>如果锁在对象修改期间过期（由于连接丢失或计算机进入睡眠/省电模式时间过长），用户会收到弹出消息警告锁已丢失。当用户关闭此弹出消息时，页面顶部会保留一个通知，并且&amp;quot;操作&amp;quot;按钮被禁用（除了&amp;quot;取消&amp;quot;按钮）：&lt;/p>
&lt;p>用户仍然可以复制/粘贴对象的当前值，然后点击&amp;quot;取消&amp;quot;按钮或打开新标签页重试修改对象。&lt;/p>
&lt;h2 id="覆盖锁">覆盖锁&lt;/h2>
&lt;p>具有特定（可配置）配置文件的用户可以&amp;quot;终止&amp;quot;此&amp;quot;锁&amp;rdquo;。请注意，在这种情况下，当前正在编辑对象的用户可能无法再提交其修改。此功能仅用于紧急情况下，当锁的&amp;quot;所有者&amp;quot;无法联系且必须更新对象时。&lt;/p>
&lt;p>一旦锁被移除，对象的详情视图将再次显示，并在顶部显示反馈消息。&lt;/p>
&lt;h2 id="配置">配置&lt;/h2>
&lt;p>三个配置参数决定了该机制的行为：&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>参数&lt;/th>
&lt;th>类型&lt;/th>
&lt;th>可见？&lt;/th>
&lt;th>描述&lt;/th>
&lt;th>默认值&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>concurrent_lock_enabled&lt;/td>
&lt;td>bool&lt;/td>
&lt;td>是&lt;/td>
&lt;td>2.2.0 新增。是否启用锁定机制以防止并发交互式修改&lt;/td>
&lt;td>false&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>concurrent_lock_expiration_delay&lt;/td>
&lt;td>int&lt;/td>
&lt;td>否&lt;/td>
&lt;td>2.2.0 新增。锁的过期延迟（以秒为单位，在 Web 浏览器崩溃或连接丢失的情况下）。编辑对象时，浏览器将在此间隔期间两次调用服务器。最小值为 15 秒。较低的值提供更响应的用户界面，但会增加服务器和网络流量的负载。&lt;/td>
&lt;td>120&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>concurrent_lock_override_profiles&lt;/td>
&lt;td>array&lt;/td>
&lt;td>否&lt;/td>
&lt;td>2.2.0 新增。允许&amp;quot;终止&amp;quot;锁的配置文件列表。值为配置文件名称数组&lt;/td>
&lt;td>array(&amp;lsquo;Administrator&amp;rsquo;)&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;hr>
&lt;p>原文：&lt;a href="https://www.itophub.io/wiki/page?id=3_2_0:admin:locking">https://www.itophub.io/wiki/page?id=3_2_0:admin:locking&lt;/a>&lt;/p>
&lt;p>版本：3_2_0/admin/locking.txt · Last modified: 2024/09/10 10:25 by 127.0.0.1&lt;/p></description></item><item><title>Docs: 调度后台任务</title><link>/docs/admin/14-cron/</link><pubDate>Fri, 27 Jun 2025 00:00:00 +0000</pubDate><guid>/docs/admin/14-cron/</guid><description>
&lt;div class="pageinfo pageinfo-primary">
&lt;p>为了正常运行，iTop 维护操作和异步任务必须定期执行。为了简化安装，所有后台任务都被分组以从单个文件启动：&lt;code>webservices/cron.php&lt;/code>。&lt;/p>
&lt;/div>
&lt;h2 id="依赖-cronphp-的功能">依赖 cron.php 的功能&lt;/h2>
&lt;p>以下功能依赖 cron.php 的激活：&lt;/p>
&lt;ul>
&lt;li>当工单达到**阈值（TTO/TTR）**时发送通知，如果没有调用此 Web 服务，则不会发生。（任务：CheckStopWatchThresholds）&lt;/li>
&lt;li>检查工单 SLA。达到限制的工单将进入升级 TTO/TTR 状态。&lt;/li>
&lt;li>自动备份。&lt;/li>
&lt;li>自动删除在创建或编辑对象期间创建的、已取消的无用附件和内联图片（任务：InlineImageGC，每小时运行）&lt;/li>
&lt;li>异步邮件。默认情况下，此选项被禁用。要启用它，请在配置文件中设置 &lt;code>email_asynchronous&lt;/code> 为 1（任务：ExecAsyncTask）&lt;/li>
&lt;li>许多扩展也依赖此 cron，例如：Ticket Creation from Email、Approval Automation、Communication to Customers 等&lt;/li>
&lt;/ul>
&lt;p>所有后台任务由 &lt;code>cron.php&lt;/code> 顺序处理。脚本将循环直到超过最大时间（请参阅参数中的 &lt;code>cron_max_execution_time&lt;/code>）。此最大时间用于避免内存泄漏。&lt;/p>
&lt;p>当 &lt;code>cron.php&lt;/code> 脚本启动时，会设置一个锁，并在脚本退出时释放。因此，同一 iTop 实例上的任何并发运行将立即退出（如果锁已设置）。&lt;/p>
&lt;ul>
&lt;li>将 &lt;code>cron_max_execution_time&lt;/code> 参数设置得不要太低，大约 600（10 分钟）：这将允许正确处理需要很长时间才能完成的任务&lt;/li>
&lt;li>例如每分钟启动 &lt;code>cron.php&lt;/code> 脚本&lt;/li>
&lt;/ul>
&lt;h2 id="windows-调度">Windows 调度&lt;/h2>
&lt;p>使用 schedtask.exe 或 &amp;lsquo;at&amp;rsquo; 命令将 cron.php 计划为每 5 分钟运行一次。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>schtasks.exe /create /sc minute /mo &lt;span style="color:#0000cf;font-weight:bold">1&lt;/span> /tn &lt;span style="color:#4e9a06">&amp;#34;iTop CRON&amp;#34;&lt;/span> /tr &lt;span style="color:#4e9a06">&amp;#34;\&amp;#34;C:\www\itop\webservices\cron.cmd\&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>注意：将 &lt;code>C:\www\itop&lt;/code> 替换为您的 iTop 目录路径&lt;/p>
&lt;h2 id="linux-调度">Linux 调度&lt;/h2>
&lt;p>编辑 crontab 以每分钟执行脚本：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>*/1 * * * * www-data /usr/bin/php /var/www/html/itop/webservices/cron.php --param_file&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>/etc/itop-cron.params &amp;gt;&amp;gt;/var/log/itop-cron.log 2&amp;gt;&lt;span style="color:#000;font-weight:bold">&amp;amp;&lt;/span>&lt;span style="color:#0000cf;font-weight:bold">1&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>注意：将 &lt;code>/var/www/html/itop&lt;/code> 替换为您的 iTop 目录路径&lt;/p>
&lt;h2 id="从-web-调度">从 Web 调度&lt;/h2>
&lt;p>cron.php 页面也可以通过 Web 服务器执行。如果您无法访问系统（例如在共享托管系统上），这很有用。在这种情况下，您可以依赖 Web cron 服务为您运行它。但与本地计划作业相比，频率和执行时间可能会受到限制。&lt;/p>
&lt;h2 id="参数">参数&lt;/h2>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>参数&lt;/th>
&lt;th>描述&lt;/th>
&lt;th>默认值&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>param_file&lt;/td>
&lt;td>参数文件的路径&lt;/td>
&lt;td>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>auth_user&lt;/td>
&lt;td>用户登录名 — 仅限 CLI 模式，如果未使用参数文件&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>auth_pwd&lt;/td>
&lt;td>用户密码 — 仅限 CLI 模式，如果未使用参数文件&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>verbose&lt;/td>
&lt;td>如果设置为 1，将提供更多信息，用于故障排除。注意：由于进程在后台持续运行，日志文件往往会很快变大。不要长时间将此选项设置为 1。&lt;/td>
&lt;td>0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>status_only&lt;/td>
&lt;td>（iTop 2.0.1 新增）如果设置为 1，则显示计划任务的状态，进程立即停止（可以与 cron.php 的正常执行并行启动）。&lt;/td>
&lt;td>0&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="参数文件">参数文件&lt;/h2>
&lt;p>由于传递给 cron.php 的命令行参数对系统上的其他用户可见，因此建议的做法是将所有敏感参数从命令行移开。这就是&amp;quot;参数文件&amp;quot;的目的。&lt;/p>
&lt;p>&lt;code>param_file&lt;/code> 参数可以与大多数 REST/CLI Web 服务一起使用。按照惯例，cron.php 服务搜索名为 &amp;ldquo;cron.params&amp;rdquo; 的参数文件来读取其参数。&lt;/p>
&lt;ul>
&lt;li>参数文件包含键/值对。&lt;/li>
&lt;li>注释以 # 开头（&lt;code>#&lt;/code> 之后找到的任何字符都将被忽略）&lt;/li>
&lt;/ul>
&lt;p>示例：&lt;/p>
&lt;pre tabindex="0">&lt;code># 这是参数文件
#
# 如果参数同时在文件和参数中给出，则保留作为参数给出的值
#
# 认证
auth_user = qwertyuiop
auth_pwd = ded!catedL0g1n
&lt;/code>&lt;/pre>&lt;h2 id="设置">设置&lt;/h2>
&lt;p>这些设置配置在主 iTop 配置文件 &amp;ldquo;itop-config.php&amp;rdquo; 中：&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>设置&lt;/th>
&lt;th>描述&lt;/th>
&lt;th>默认值&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>cron_max_execution_time&lt;/td>
&lt;td>cron.php 脚本的持续时间（秒）：如果超过，脚本将退出，即使还有剩余任务要处理。必须短于 php max_execution_time 设置（注意，在 CLI 中，默认设置为 0，表示无限制）。如果 cron.php 通过 Web 运行，则必须短于 Web 服务器响应超时。&lt;/td>
&lt;td>600&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>cron_sleep&lt;/td>
&lt;td>cron.php 再次检查是否需要执行某些操作之前的持续时间（秒）&lt;/td>
&lt;td>2&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>email_asynchronous&lt;/td>
&lt;td>如果设置为 1，则邮件离线发送，这需要激活 cron.php。例外：某些功能（如邮件测试工具）将强制使用序列化模式&lt;/td>
&lt;td>0&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="允许的用户">允许的用户&lt;/h2>
&lt;p>只有管理员才被允许执行 &lt;code>cron.php&lt;/code>。&lt;/p>
&lt;h2 id="故障排除">故障排除&lt;/h2>
&lt;p>当任务不再运行时，有几件事需要了解：&lt;/p>
&lt;h3 id="cronphp-在做什么">cron.php 在做什么？&lt;/h3>
&lt;ul>
&lt;li>cron.php 程序启动时，会查找实现此 PHP 接口的任务，并将它们记录在表 &lt;code>priv_backgroundtask&lt;/code> 中。&lt;/li>
&lt;li>此表中存在的条目取决于安装的 iTop 扩展。&lt;/li>
&lt;li>&lt;code>priv_backgroundtask&lt;/code> 包含每个任务的多个信息，例如：上次运行时间、下次运行预计何时开始、此任务的平均执行时间、任务当前是&lt;strong>活动&lt;/strong>还是&lt;strong>暂停&lt;/strong>（由管理员请求，字段状态）&amp;hellip;&lt;/li>
&lt;li>cron.php 程序查找活动且下次运行已过期的任务，&lt;strong>逐个执行&lt;/strong>，要求每个任务在 &lt;code>cron_max_execution_time&lt;/code> 后停止执行。任务当然会在有意义的点停止，例如对于 Mail To Ticket Automation，它可以在处理 2 封接收到的邮件之间停止。询问任务下次运行应该是什么时间，并将该信息存储在表中。&lt;/li>
&lt;li>然后检查自身启动时间是否超过 &lt;code>cron_max_execution_time&lt;/code>，如果是，则自杀（这是因为永不结束的进程通常会消耗内存，而这些内存不会完全释放）&lt;/li>
&lt;li>否则等待 &lt;code>cron_sleep&lt;/code> 秒，然后再次检查表中是否有准备执行的任务。&lt;/li>
&lt;/ul>
&lt;h3 id="当时可以做什么">当&amp;hellip;时可以做什么&lt;/h3>
&lt;p>&lt;strong>任务似乎从未执行：&lt;/strong>&lt;/p>
&lt;p>当特定任务遇到使其陷入无限循环的问题时，cron.php 可能会被 PHP &lt;code>max_execution_time&lt;/code> 停止（通常在 CLI 中不会）；在所有情况下，跟随该任务的任务将永远不会执行。在 cron.php 的后续运行中，由于任务总是按相同的顺序执行，同样的问题可能会再次发生。为了识别有问题的任务，您应该通过设置 &lt;code>priv_backgroundtask&lt;/code> 表中的状态，逐个暂停您怀疑有问题的任务，并查看是否已停止有问题的任务。这种情况通常是由于带来该任务的扩展的 bug，或任务面临计划外情况。&lt;/p>
&lt;p>应监控日志文件以生成警报，以便提前通知此类问题。&lt;/p>
&lt;hr>
&lt;p>原文：&lt;a href="https://www.itophub.io/wiki/page?id=3_2_0:admin:cron">https://www.itophub.io/wiki/page?id=3_2_0:admin:cron&lt;/a>&lt;/p>
&lt;p>版本：3_2_0/admin/cron.txt · Last modified: 2024/09/10 10:25 by 127.0.0.1&lt;/p></description></item><item><title>Docs: 调优 iTop 性能</title><link>/docs/admin/16-performance/</link><pubDate>Fri, 27 Jun 2025 00:00:00 +0000</pubDate><guid>/docs/admin/16-performance/</guid><description>
&lt;div class="pageinfo pageinfo-primary">
&lt;p>为了提高 iTop 服务器的性能，您必须首先找到瓶颈。是 PHP 页面执行太慢，还是 MySQL？&lt;/p>
&lt;p>实际的应用性能调优需要深入了解 iTop 实例的实际使用模式，但有一些通用的检查点：&lt;/p>
&lt;/div>
&lt;h2 id="安装-apcu">安装 APCu&lt;/h2>
&lt;p>如果系统上可用，请安装并启用 APCu（Alternative PHP Cache）。APCu 通过将 PHP 解析的结果作为操作码缓存在共享内存中来加速 PHP 应用。此外，iTop 使用 APCu 将许多内部结构缓存在内存中，而不是在每次页面加载时重建它们。&lt;/p>
&lt;p>安装 APCu 将提高应用的整体响应性，这对于&amp;quot;小&amp;quot;页面尤其重要。如果不可用，iTop 实现了一个基于文件的简单缓存机制。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-ini" data-lang="ini">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">[apcu]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#c4a000">apc.shm_size&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#4e9a06">128M&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#c4a000">apc.ttl&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#4e9a06">7200&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="安装-fpm">安装 FPM&lt;/h2>
&lt;p>为了提高性能，您可以使用 php-fpm 和 fastcgi。&lt;/p>
&lt;p>关于 Apache + FPM 的超时观察：&lt;/p>
&lt;ul>
&lt;li>超时来自 Apache，通过 ProxyTimeout 指令。如果未定义，Apache 将使用 TimeOut 指令（默认为 60s）。&lt;/li>
&lt;li>AJAX 请求确实返回 504 错误（超时）。&lt;/li>
&lt;li>后续 AJAX 请求将不会发送，我们必须猜测 setup 何时结束以及何时可以重新运行它。&lt;/li>
&lt;li>Setup 过程是健壮的，当启动 DB 升级时，即使 Apache 超时，它也会完成。这意味着如果我们重新运行 setup，它不会启动新的查询，而是等待当前查询的结束。&lt;/li>
&lt;li>如果 MySQL 在 setup 期间重新启动，MySQL 会回滚并恢复到上一个表。没有减速，没有数据丢失。&lt;/li>
&lt;/ul>
&lt;p>警告：&lt;/p>
&lt;ul>
&lt;li>超时发生后，我们不知道 setup 何时结束。当前的解决方案是检查当前的 MySQL 进程，等待结束并再次运行 setup。&lt;/li>
&lt;li>注意磁盘可用空间。ALTER TABLE 需要相当于表大小的磁盘可用空间。例如，如果 &amp;ldquo;attachment&amp;rdquo; 表占用 7GB，则 ALTER TABLE 需要额外的 7GB。（如果选中了复选框，请考虑 iTop 备份的大小）。&lt;/li>
&lt;li>维护和只读模式：在&amp;quot;小&amp;quot;服务器上，SQL 查询会占用如此多的资源，以至于在只读模式下使用 iTop 很可能不可用。&lt;/li>
&lt;/ul>
&lt;h2 id="配置-apache-模块headers--expires">配置 Apache 模块：Headers &amp;amp; Expires&lt;/h2>
&lt;p>激活 apache 的模块：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>a2enmod expires
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>a2enmod headers
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>配置它们：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-apache" data-lang="apache">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">&amp;lt;IfModule&lt;/span> &lt;span style="color:#4e9a06">mod_expires.c&lt;/span>&lt;span style="color:#204a87;font-weight:bold">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87">ExpiresActive&lt;/span> &lt;span style="color:#204a87;font-weight:bold">On&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87">ExpiresByType&lt;/span> image/gif A172800
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87">ExpiresByType&lt;/span> image/jpeg A172800
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87">ExpiresByType&lt;/span> image/png A172800
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87">ExpiresByType&lt;/span> text/css A172800
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87">ExpiresByType&lt;/span> text/javascript A172800
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87">ExpiresByType&lt;/span> application/x-javascript A172800
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">&amp;lt;/IfModule&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">&amp;lt;IfModule&lt;/span> &lt;span style="color:#4e9a06">mod_headers.c&lt;/span>&lt;span style="color:#204a87;font-weight:bold">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;FilesMatch&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;\.(gif|jpe?g|png|css|swf|js)$&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87">Header&lt;/span> set Cache-Control &lt;span style="color:#4e9a06">&amp;#34;max-age=2592000, public&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;/FilesMatch&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">&amp;lt;/IfModule&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="检查-mysql-的键缓存">检查 MySQL 的键缓存&lt;/h2>
&lt;p>确保 MySQL 有足够的内存来&lt;strong>缓存所有索引&lt;/strong>在内存中。重要的状态变量是：&lt;code>key_read_requests&lt;/code> 和 &lt;code>key_reads&lt;/code>。&lt;/p>
&lt;p>实际的 &lt;code>key_reads / key_read_requests&lt;/code> 比率应尽可能低（通常小于 0.1%）。如果此比率太高，这意味着您应该增加分配给缓存 MySQL 索引的内存量（在 &lt;code>my.cnf&lt;/code> 中调整变量 &lt;code>key_buffer_size&lt;/code> 并重新启动 MySQL 服务器）。&lt;/p>
&lt;h2 id="检查查询缓存">检查查询缓存&lt;/h2>
&lt;p>检查 MySQL 查询缓存是否已启用，并有足够的内存来缓存最常见查询的结果。&lt;/p>
&lt;hr>
&lt;p>原文：&lt;a href="https://www.itophub.io/wiki/page?id=3_2_0:admin:performance">https://www.itophub.io/wiki/page?id=3_2_0:admin:performance&lt;/a>&lt;/p>
&lt;p>版本：3_2_0/admin/performance.txt · Last modified: 2025/05/16 09:57 by 127.0.0.1&lt;/p></description></item><item><title>Docs: 管理个人数据</title><link>/docs/admin/19-rgpd/</link><pubDate>Fri, 27 Jun 2025 00:00:00 +0000</pubDate><guid>/docs/admin/19-rgpd/</guid><description>
&lt;div class="pageinfo pageinfo-primary">
&lt;p>如果您必须遵守 GDPR，以下是一些帮助您的提示&amp;hellip;&lt;/p>
&lt;/div>
&lt;h2 id="itop-中的个人数据清单">iTop 中的个人数据清单&lt;/h2>
&lt;h3 id="person-对象中的个人数据">Person 对象中的个人数据&lt;/h3>
&lt;p>iTop 中的大部分个人信息存储在 Person 对象中。在标准 iTop 数据模型中，这些数据包括：&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>字段代码&lt;/th>
&lt;th>标签&lt;/th>
&lt;th>字段描述&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>email&lt;/td>
&lt;td>Email&lt;/td>
&lt;td>人员的电子邮件地址&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>employee_number&lt;/td>
&lt;td>Employee number&lt;/td>
&lt;td>员工编号或公司内使用的任何标识符&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>first_name&lt;/td>
&lt;td>First Name&lt;/td>
&lt;td>人员的名字&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>function&lt;/td>
&lt;td>Function&lt;/td>
&lt;td>人员的职能/职位&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>location_id&lt;/td>
&lt;td>Location&lt;/td>
&lt;td>人员的位置（链接到 Location 对象）&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>manager_id&lt;/td>
&lt;td>Manager&lt;/td>
&lt;td>人员的经理（链接到 Person 对象）&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>mobile_phone&lt;/td>
&lt;td>Mobile Phone&lt;/td>
&lt;td>手机号码&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>phone&lt;/td>
&lt;td>Phone&lt;/td>
&lt;td>固定电话号码&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>picture&lt;/td>
&lt;td>Picture&lt;/td>
&lt;td>人员的照片&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>由于 iTop 的关系性质，Person 对象中存储的信息不应在其他地方重复。此原则的少数例外如下：&lt;/p>
&lt;h3 id="历史记录中的个人数据">历史记录中的个人数据&lt;/h3>
&lt;p>对 Person 对象的所有修改都记录在该 Person 对象的历史记录中，从而存储了一些个人信息。您可以使用以下 OQL 查询列出对给定 Person 对象所做的所有更改：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sql" data-lang="sql">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">SELECT&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">CMDBChangeOp&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">WHERE&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">objclass&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#4e9a06">&amp;#39;Person&amp;#39;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">AND&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">objkey&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#000">person_id&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>其中：&lt;code>person_id&lt;/code> 是 Person 对象的标识符。用户账号关联的联系人所做的所有修改也会记录联系人的名称（即 friendlyname）。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sql" data-lang="sql">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">SELECT&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">CMDBChange&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">WHERE&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">userinfo&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#000">person_name&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>其中：&lt;code>person_name&lt;/code> 是 Person 的完整名称（即 friendlyname），例如 &amp;ldquo;Claude Monet&amp;rdquo;。&lt;/p>
&lt;h3 id="案例日志中的个人数据">案例日志中的个人数据&lt;/h3>
&lt;p>iTop 中的每个案例日志字段存储有关创建每个条目的人员的信息（在当前版本的 iTop 中，无法修改案例日志条目）。案例日志中记录的信息（每个条目）包含：&lt;/p>
&lt;ul>
&lt;li>修改的日期和时间&lt;/li>
&lt;li>进行修改的人员的全名（修改时）&lt;/li>
&lt;li>进行修改的人员对象的标识符&lt;/li>
&lt;/ul>
&lt;p>例如，如果与 Person &amp;ldquo;Claude Monet&amp;rdquo;（id=3）关联的用户创建了两个案例日志条目，案例日志的内容将按如下方式存储在数据库中：&lt;/p>
&lt;pre tabindex="0">&lt;code>========== 2018-05-09 11:38:45 : Claude Monet (3) ============
&amp;lt;p&amp;gt;This is the second entry of the case log&amp;lt;/p&amp;gt;
========== 2018-05-09 11:38:27 : Claude Monet (3) ============
&amp;lt;p&amp;gt;This is the first entry of the case log&amp;lt;/p&amp;gt;
&lt;/code>&lt;/pre>&lt;h3 id="邮件通知中的个人数据">邮件通知中的个人数据&lt;/h3>
&lt;p>每当 iTop 以电子邮件形式发送通知时，信息都会记录在 &lt;code>EventNotificationEmail&lt;/code> 对象中。此对象记录发送到邮件服务器的电子邮件。此对象包含收件人（在 TO、CC 或 BCC 中）的电子邮件地址和发送的消息内容。EmailNotification 对象还存储发送日期。&lt;/p>
&lt;h2 id="数据流">数据流&lt;/h2>
&lt;p>处理个人数据时的一个重要主题是记录组织内个人数据的流。本文档（和 iTop 本身）无法为您记录此流，因为每个用例都是特定的，取决于在操作 iTop 时建立的流程和集成。但是，iTop 提供了一些功能，可以帮助您记录和控制此信息流。&lt;/p>
&lt;h3 id="restjson-web-服务日志">REST/JSON Web 服务日志&lt;/h3>
&lt;p>您可以通过在 iTop 配置文件中将配置参数 &lt;code>log_rest_service&lt;/code> 设置为 true 来审计通过 REST/JSON 服务执行的操作。设置此参数后，每次 REST/JSON 操作都将在 iTop 数据库中创建一个 EventRestService 对象。此对象记录：&lt;/p>
&lt;ul>
&lt;li>操作的日期/时间&lt;/li>
&lt;li>用于执行操作的用户账号&lt;/li>
&lt;li>JSON 输入参数&lt;/li>
&lt;li>操作的输出（代码、消息和 JSON 输出的截断版本）&lt;/li>
&lt;/ul>
&lt;p>使用所有这些信息，您可以确定通过 REST/JSON Web 服务的个人信息流（如果有）。&lt;/p>
&lt;h3 id="同步数据源列表">同步数据源列表&lt;/h3>
&lt;p>您可以轻松列出所有导入或更新 Person 的同步数据源，通过搜索&amp;quot;目标类&amp;quot;为&amp;quot;Person&amp;quot;的同步数据源。此搜索可以通过&amp;quot;管理工具 / 同步数据源&amp;quot;执行，或运行以下 OQL 查询：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sql" data-lang="sql">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">SELECT&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">SynchroDataSource&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">WHERE&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">scope_class&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#4e9a06">&amp;#39;Person&amp;#39;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>每个数据源都保留其操作的完整日志，包括运行日期/时间和每次运行的执行操作摘要（创建/更新/删除）。&lt;/p>
&lt;p>注意：如果为同步数据源指定了&amp;quot;用户&amp;quot;，则只有指定的用户账号才能执行此同步。&lt;/p>
&lt;h3 id="批量导出和批量导入的限制">批量导出（和批量导入）的限制&lt;/h3>
&lt;ul>
&lt;li>只有具有对 Person 的&amp;quot;批量读取&amp;quot;能力的用户账号才能执行人员列表的导出。&lt;/li>
&lt;li>类似地，只有具有对 Person 的&amp;quot;批量修改&amp;quot;能力的用户账号才能执行 Person 的 CSV 导入。&lt;/li>
&lt;li>这些能力可以在每个用户账号的详情中的&amp;quot;授权矩阵&amp;quot;选项卡中查看。&lt;/li>
&lt;/ul>
&lt;h2 id="清理个人数据">清理个人数据&lt;/h2>
&lt;p>要完全清理与人员相关的数据，必须：&lt;/p>
&lt;ul>
&lt;li>删除与此人员对应的 Person 对象，这也将删除有关此 Person 的历史信息。&lt;/li>
&lt;li>删除此人员创建的案例日志条目&lt;/li>
&lt;li>删除发送给此人员的 EmailNotification 对象&lt;/li>
&lt;/ul>
&lt;p>但这些操作存在限制：&lt;/p>
&lt;ul>
&lt;li>根据目标 Person 对象与 iTop 数据库中其他对象之间的关系，删除 Person 对象可能不可能，除非在某些其他对象上指定替代 Person，以遵守数据库完整性约束。&lt;/li>
&lt;li>删除案例日志条目目前在 iTop 中未实现，并且由于案例日志文本必须与另一个称为案例日志索引的字段保持一致，因此使用 SQL 查询实现非平凡。&lt;/li>
&lt;li>更新 CMDBChange 对象以替换对联系人名称的引用可以通过单个 SQL 查询完成，因为只有一个字段 &amp;lsquo;userinfo&amp;rsquo; 需要匿名化。由于此字段仅向最终用户显示，而不用于 iTop 中的任何引用，因此没有完整性约束，可以在字段中放入任何值。&lt;/li>
&lt;li>由于一封邮件通知可能发送给多个人员（在 TO、CC 和 BCC 中），删除一封此类通知将影响除目标人员之外的其他用户。&lt;/li>
&lt;/ul>
&lt;p>由于上述限制，&amp;ldquo;假名化&amp;quot;方法似乎比完全擦除个人数据更现实。&lt;/p>
&lt;h2 id="个人数据的假名化">个人数据的假名化&lt;/h2>
&lt;p>这就是 Personal data anonymizer 扩展为您提出的方案。&lt;/p>
&lt;ul>
&lt;li>通过在所有必填字段中替换为匿名值（常量或随机）来匿名化 Person 对象&lt;/li>
&lt;li>清空所有非必填字段（如 Location、Manager、Phone number、n:n 关系）&lt;/li>
&lt;li>对案例日志条目进行假名化，删除所有对人员的引用，而不更改文本长度，以保留与案例日志&amp;quot;索引&amp;quot;字段的一致性&lt;/li>
&lt;li>删除 Person 的历史记录（CMDBChange / CMDBChangeOp）以删除字段的&amp;quot;先前值&amp;rdquo;，这些值将有助于恢复值&lt;/li>
&lt;li>匿名化包含 Person 名称的 CMDBChange &amp;ldquo;userinfo&amp;rdquo; 字段&lt;/li>
&lt;li>删除超过（短）保留期（3 个月？）的所有 EmailNotification 对象&lt;/li>
&lt;/ul>
&lt;h2 id="导出个人数据">导出个人数据&lt;/h2>
&lt;ul>
&lt;li>可以使用 iTop 的标准导出功能导出 Person 详情。&lt;/li>
&lt;li>可以通过搜索每个包含案例日志的对象类（即每个工单类）并搜索&amp;quot;公共日志&amp;quot;包含&amp;quot;联系人名称&amp;quot;来导出案例日志条目。&lt;/li>
&lt;/ul>
&lt;p>这可以使用&amp;quot;运行查询&amp;quot;菜单和如下 OQL 实现：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sql" data-lang="sql">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">SELECT&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">UserRequest&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">WHERE&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#000">public_log&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">LIKE&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#000">name&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">OR&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">private_log&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">LIKE&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#000">name&lt;/span>&lt;span style="color:#000;font-weight:bold">)&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>将 &lt;code>:name&lt;/code> 参数的值指定为 &lt;code>%contact_friendlyname%&lt;/code>。&lt;/p>
&lt;p>例如，要导出 Claude Monet 在案例日志中创建条目的所有 User Request，OQL 查询将是：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sql" data-lang="sql">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">SELECT&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">UserRequest&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">WHERE&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#000">public_log&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">LIKE&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#4e9a06">&amp;#39;%Claude Monet%&amp;#39;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">OR&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">private_log&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">LIKE&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#4e9a06">&amp;#39;%Claude Monet%&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">)&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>可以使用以下 OQL 查询列出和导出通知邮件：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sql" data-lang="sql">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">SELECT&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">EventNotificationEmail&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">WHERE&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">TO&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#4e9a06">&amp;#39;email_address&amp;#39;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">OR&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">cc&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">LIKE&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#4e9a06">&amp;#39;%email_address%&amp;#39;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">OR&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">bcc&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">LIKE&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#4e9a06">&amp;#39;%email_address%&amp;#39;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;p>原文：&lt;a href="https://www.itophub.io/wiki/page?id=3_2_0:admin:rgpd">https://www.itophub.io/wiki/page?id=3_2_0:admin:rgpd&lt;/a>&lt;/p>
&lt;p>版本：3_2_0/admin/rgpd.txt · Last modified: 2024/09/10 10:25 by 127.0.0.1&lt;/p></description></item><item><title>Docs: 监控健康检查</title><link>/docs/admin/15-monitoring_healthcheck/</link><pubDate>Fri, 27 Jun 2025 00:00:00 +0000</pubDate><guid>/docs/admin/15-monitoring_healthcheck/</guid><description>
&lt;div class="pageinfo pageinfo-primary">
&lt;p>如果您需要通过外部工具轮询 iTop 状态，您有一个专用页面。此页面不需要任何认证。返回的状态为 JSON 格式。&lt;/p>
&lt;/div>
&lt;h2 id="端点">端点&lt;/h2>
&lt;pre tabindex="0">&lt;code>https://iTOP_URL/webservices/status.php
&lt;/code>&lt;/pre>&lt;h2 id="示例">示例&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>curl http://localhost/iTop/webservices/status.php
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;status&amp;#34;&lt;/span>:&lt;span style="color:#4e9a06">&amp;#34;RUNNING&amp;#34;&lt;/span>,&lt;span style="color:#4e9a06">&amp;#34;code&amp;#34;&lt;/span>:0,&lt;span style="color:#4e9a06">&amp;#34;message&amp;#34;&lt;/span>:&lt;span style="color:#4e9a06">&amp;#34;&amp;#34;&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="返回状态">返回状态&lt;/h2>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>HTTP 状态&lt;/th>
&lt;th>含义&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>200&lt;/td>
&lt;td>应用正常运行&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>500&lt;/td>
&lt;td>至少一项检查失败&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="与监控系统集成">与监控系统集成&lt;/h2>
&lt;p>可将该端点配置为 Nagios 或 Zabbix 的 HTTP 检查项，实现自动告警。&lt;/p>
&lt;hr>
&lt;p>原文：&lt;a href="https://www.itophub.io/wiki/page?id=3_2_0:admin:monitoring:healthcheck">https://www.itophub.io/wiki/page?id=3_2_0:admin:monitoring:healthcheck&lt;/a>&lt;/p>
&lt;p>2024/09/10 10:25 by127.0.0.1&lt;/p>
&lt;p>版本：3_2_0/admin/monitoring/healthcheck.txt · Last modified: 2024/09/10 10:25 by 127.0.0.1&lt;/p></description></item><item><title>Docs: 安全最佳实践</title><link>/docs/admin/security-best-practices/</link><pubDate>Fri, 27 Jun 2025 00:00:00 +0000</pubDate><guid>/docs/admin/security-best-practices/</guid><description>
&lt;div class="pageinfo pageinfo-primary">
&lt;p>iTop 基于 PHP，其内容由 Web 服务器提供。&lt;/p>
&lt;p>本页参考 PHP 和 Web 服务器配置，以增强 iTop 安装的安全性。&lt;/p>
&lt;p>您将在这里找到一些 HTTP 标头配置，以在您的 Web 服务器中配置，从而增加额外的安全层。由于本页力求保持简单，这里提到的标头通常可以进一步微调以更加严格。&lt;/p>
&lt;/div>
&lt;h2 id="目录写入权限">目录写入权限&lt;/h2>
&lt;p>Web 服务器用户应被允许对 iTop 根目录下的以下目录具有写入权限：&lt;/p>
&lt;ul>
&lt;li>conf&lt;/li>
&lt;li>data&lt;/li>
&lt;li>env-*&lt;/li>
&lt;li>根目录（iTop Hub 连接器将在编译之前删除 env-production-build 目录）&lt;/li>
&lt;li>log&lt;/li>
&lt;/ul>
&lt;h2 id="保护关键目录访问">保护关键目录访问&lt;/h2>
&lt;p>以下文件目录必须对 Web 用户拒绝访问：&lt;/p>
&lt;ul>
&lt;li>conf：目录及其所有内容&lt;/li>
&lt;li>data：目录及其所有内容&lt;/li>
&lt;li>datamodels：仅允许具有以下扩展名的文件：css|scss|js|map|png|bmp|gif|jpe?g|svg|tiff|woff2?|ttf|eot|html&lt;/li>
&lt;li>env-*：仅允许具有以下扩展名的文件：css|scss|js|map|png|bmp|gif|jpe?g|svg|tiff|woff2?|ttf|eot|html&lt;/li>
&lt;li>extensions：仅允许具有以下扩展名的文件：css|scss|js|map|png|bmp|gif|jpe?g|svg|tiff|woff2?|ttf|eot|html&lt;/li>
&lt;li>lib：目录及其所有内容&lt;/li>
&lt;li>log：目录及其所有内容&lt;/li>
&lt;li>setup/permissions-test-folder/permissions-test-subfolder/：仅当您的 Web 服务器不使用 .htaccess 或 web.config 时才需要。如果访问未被拒绝，您将在 iTop 设置期间收到安全警告（自 3.0.2 和 2.7.8 起）&lt;/li>
&lt;/ul>
&lt;p>您还应阻止目录列表。&lt;/p>
&lt;h2 id="禁用配置编辑器">禁用配置编辑器&lt;/h2>
&lt;p>由于 iTop 配置存储为 PHP 文档，因此可以通过配置编辑器进行 PHP 代码注入。如果您认为让 iTop 管理员交互式编辑配置文件风险太大（例如，如果 iTop 安装在与其他应用共享的服务器上），您可以完全禁用交互式配置编辑器。要禁用交互式编辑器，请在配置文件的 &amp;lsquo;module_settings&amp;rsquo; 部分设置以下配置参数：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-php" data-lang="php">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&amp;#39;itop-config&amp;#39;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#000;font-weight:bold">[&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#39;config_editor&amp;#39;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;disabled&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">]&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="使用-https">使用 HTTPS&lt;/h2>
&lt;p>您应仅使用 https 协议提供页面。&lt;/p>
&lt;h3 id="strict-transport-security-http-标头">Strict-Transport-Security HTTP 标头&lt;/h3>
&lt;p>强制 https 连接的一个好方法是发送 Strict-Transport-Security HTTP 标头。我们建议使用以下值：&lt;/p>
&lt;pre tabindex="0">&lt;code>Header always set Strict-Transport-Security &amp;#34;max-age=63072000; includeSubdomains;&amp;#34; env=HTTPS
&lt;/code>&lt;/pre>&lt;p>有关此标头的更多信息，请查看相应的参考：Strict-Transport-Security - HTTP | MDN&lt;/p>
&lt;h2 id="防止会话窃取">防止会话窃取&lt;/h2>
&lt;p>虽然 PHP 默认配置从安全角度来看相当相关，但可以增强：您应该更改以下条目的默认值：&lt;/p>
&lt;h3 id="sessioncookie_httponly">session.cookie_httponly&lt;/h3>
&lt;p>为了防止恶意 JavaScript 代码嗅探用户的会话，您应该启用 session.cookie_httponly（请参阅 PHP 文档）。&lt;/p>
&lt;p>您可以在 php.ini 中使用 &lt;code>session.cookie_httponly = 1&lt;/code> 或在 Apache 中使用 &lt;code>php_flag session.cookie_httponly on&lt;/code> 来实现。&lt;/p>
&lt;h3 id="sessioncookie_secure">session.cookie_secure&lt;/h3>
&lt;p>如果您使用 https，则应启用此指令，以便仅通过安全连接发送 cookie，请参阅 PHP 文档。&lt;/p>
&lt;h3 id="sessioncookie_samesite">session.cookie_samesite&lt;/h3>
&lt;p>您应使用 LAX 值启用此指令，以便会话 cookie 更难拦截，请参阅 PHP 文档。&lt;/p>
&lt;h3 id="zendexception_ignore_args">zend.exception_ignore_args&lt;/h3>
&lt;p>此 PHP 参数在某些 PHP 发行版中默认设置为 false，应设置为 true，以避免在发生异常时，参数值以明文形式写入 error_log。这些参数可能包含例如 iTop 数据库的登录名和密码。&lt;/p>
&lt;h2 id="itop-发送的-http-标头">iTop 发送的 HTTP 标头&lt;/h2>
&lt;h3 id="x-frame-options">X-Frame-Options&lt;/h3>
&lt;p>这指示浏览器是否应被允许在 &lt;frame>、&lt;iframe>、&lt;embed> 或 &lt;object> 中渲染页面。&lt;/p>
&lt;p>请参阅参考：X-Frame-Options - HTTP | MDN&lt;/p>
&lt;p>如果您使用的是较旧的 iTop 版本，可以在 Apache 配置中添加：&lt;/p>
&lt;pre tabindex="0">&lt;code>Header always set X-Frame-Options &amp;#34;sameorigin&amp;#34;
&lt;/code>&lt;/pre>&lt;h3 id="x-content-type-options">X-Content-Type-Options&lt;/h3>
&lt;p>这允许选择退出 MIME 类型嗅探（Content-Type 标头中公布的 MIME 类型不应更改）。&lt;/p>
&lt;p>请参阅此参考：X-Content-Type-Options - HTTP | MDN&lt;/p>
&lt;p>如果您使用的是较旧的 iTop 版本，可以在 Apache 配置中添加：&lt;/p>
&lt;pre tabindex="0">&lt;code>Header always set X-Content-Type-Options &amp;#34;nosniff&amp;#34;
&lt;/code>&lt;/pre>&lt;h2 id="其他-http-标头">其他 HTTP 标头&lt;/h2>
&lt;h3 id="referrer-policy">Referrer-Policy&lt;/h3>
&lt;p>HTTP_REFERER 标头由浏览器在每个 http 查询中发送，以给出上一页的 URL。可以通过从服务器发送 Referrer-Policy http 标头来更改此行为。&lt;/p>
&lt;p>参考文档：Referrer-Policy - HTTP | MDN&lt;/p>
&lt;p>我们建议使用 strict-origin-when-cross-origin 值，以便：&lt;/p>
&lt;ul>
&lt;li>在 iTop 内部发送整个字符串&lt;/li>
&lt;li>仅在 https 上的跨源请求中发送 origin（方案、主机、端口）&lt;/li>
&lt;li>在非安全目标（http）上不发送 referer&lt;/li>
&lt;/ul>
&lt;p>Apache 的示例配置：&lt;/p>
&lt;pre tabindex="0">&lt;code>Header always set Referrer-Policy &amp;#34;strict-origin-when-cross-origin&amp;#34;
&lt;/code>&lt;/pre>&lt;h3 id="content-security-policy">Content-Security-Policy&lt;/h3>
&lt;p>此标头将指定浏览器可以在每个页面上加载哪些资源。其主要目标是防止跨站脚本（XSS）和数据注入攻击。&lt;/p>
&lt;p>请参阅参考：Content Security Policy (CSP) - HTTP | MDN&lt;/p>
&lt;p>iTop 社区包的简单配置可以是：&lt;/p>
&lt;pre tabindex="0">&lt;code>Header set Content-Security-Policy &amp;#34;default-src &amp;#39;self&amp;#39;; frame-src &amp;#39;self&amp;#39; www.itophub.io; img-src &amp;#39;self&amp;#39; data: blob:; script-src &amp;#39;self&amp;#39; &amp;#39;unsafe-inline&amp;#39; &amp;#39;unsafe-eval&amp;#39;; connect-src &amp;#39;self&amp;#39; www.itophub.io; style-src &amp;#39;self&amp;#39; &amp;#39;unsafe-inline&amp;#39;;
&lt;/code>&lt;/pre>&lt;h2 id="apache-配置示例">Apache 配置示例&lt;/h2>
&lt;pre tabindex="0">&lt;code>php_flag session.cookie_httponly on
# 仅用于 https:
Header always set Strict-Transport-Security &amp;#34;max-age=63072000; includeSubdomains;&amp;#34;
php_flag session.cookie_secure on
&lt;/code>&lt;/pre>&lt;h2 id="itop-扩展">iTop 扩展&lt;/h2>
&lt;p>摘自新扩展指南：&lt;/p>
&lt;h3 id="安全">安全&lt;/h3>
&lt;p>如果您希望文件在没有任何认证的情况下被调用（在大多数情况下不推荐），您需要将文件添加到 model.&lt;module>.php 文件的 delegated_authentication_endpoints 中。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-php" data-lang="php">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">...&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#39;delegated_authentication_endpoints&amp;#39;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#000;font-weight:bold">[&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#39;index.php&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#39;open_access.php&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000;font-weight:bold">],&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">...&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;p>原文：&lt;a href="https://www.itophub.io/wiki/page?id=3_2_0:install:security">https://www.itophub.io/wiki/page?id=3_2_0:install:security&lt;/a>&lt;/p>
&lt;p>版本：3_2_0/install/security.txt · Last modified: 2026/04/13 17:00 by 127.0.0.1&lt;/p></description></item><item><title>Docs: 归档</title><link>/docs/admin/archiving/</link><pubDate>Fri, 27 Jun 2025 00:00:00 +0000</pubDate><guid>/docs/admin/archiving/</guid><description>
&lt;div class="pageinfo pageinfo-primary">
&lt;p>目的：当您的过时数据开始比活跃数据多得多时，提高搜索性能。&lt;/p>
&lt;/div>
&lt;h2 id="启用归档">启用归档&lt;/h2>
&lt;p>默认情况下，任何类都不启用归档。只能在数据模型中的&lt;strong>根类&lt;/strong>上激活，例如 &lt;code>FunctionalCI&lt;/code>、&lt;code>Contact&lt;/code>、&lt;code>Ticket&lt;/code> 等。有关详细信息，请参阅 XML 参考。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-xml" data-lang="xml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">&amp;lt;classes&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;class&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;Ticket&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;properties&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;archive&lt;/span> &lt;span style="color:#c4a000">_delta=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;define&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;enabled&amp;gt;&lt;/span>true&lt;span style="color:#204a87;font-weight:bold">&amp;lt;/enabled&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;/archive&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;/properties&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;/class&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">&amp;lt;/classes&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>允许类的对象被归档对用户界面没有直接影响，直到模块提供归档和取消归档对象的功能。&lt;/p>
&lt;p>如果您想&lt;strong>自动&lt;/strong>归档每个已关闭且超过两年的工单，则可以开发一个特定的扩展，使用后台任务来完成。此模块目前尚不存在。&lt;/p>
&lt;h4 id="归档模块的-api">归档模块的 API&lt;/h4>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-php" data-lang="php">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">DBSearch&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">::&lt;/span>&lt;span style="color:#c4a000">DBBulkArchive&lt;/span>&lt;span style="color:#000;font-weight:bold">()&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">DBSearch&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">::&lt;/span>&lt;span style="color:#c4a000">DBBulkUnarchive&lt;/span>&lt;span style="color:#000;font-weight:bold">()&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">DBSearch&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">::&lt;/span>&lt;span style="color:#c4a000">DBBulkWriteArchiveFlag&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="用户体验">用户体验&lt;/h2>
&lt;h3 id="标准模式">标准模式&lt;/h3>
&lt;p>所有归档对象对所有用户（包括管理员）都是隐藏的，就像它们被删除了一样。&lt;/p>
&lt;p>在其他指向它们的对象中可以找到对其友好名称的引用。例如，一个已归档的联系人是一个未归档变更的呼叫者。如您所见，链接是&lt;strong>非活动&lt;/strong>的，您无法打开呼叫者详情。&lt;/p>
&lt;p>在其他对象的历史记录中，您只会得到该归档对象的 id：&lt;/p>
&lt;p>如果您尝试使用书签 URL 或构建如下 URL 来打开该归档对象的详情：&lt;code>http://myitop/pages/UI.php?operation=details&amp;amp;class=Person&amp;amp;id=11&amp;amp;&lt;/code>&lt;/p>
&lt;p>当对象被归档时，其所有与其他对象的 n:n 链接也会被&lt;strong>归档&lt;/strong>，这意味着它们不再可见。&lt;/p>
&lt;h3 id="归档模式">归档模式&lt;/h3>
&lt;p>您可以切换归档模式：&lt;/p>
&lt;ul>
&lt;li>在归档模式下，您会看到一个橙色标签提醒您已激活它。&lt;/li>
&lt;li>所有对象都是&lt;strong>只读&lt;/strong>的&lt;/li>
&lt;li>归档对象是&lt;strong>可见&lt;/strong>的并标记为&lt;strong>已归档&lt;/strong>&lt;/li>
&lt;li>引用&lt;strong>已归档&lt;/strong>对象的属性是可点击的：&lt;/li>
&lt;/ul>
&lt;p>如果您在归档对象上&lt;strong>停用归档模式&lt;/strong>：&lt;/p>
&lt;p>您会再次收到反馈消息。&lt;/p>
&lt;h2 id="常见问题">常见问题&lt;/h2>
&lt;p>&lt;strong>问：&amp;ldquo;激活归档模式&amp;quot;菜单不可用？&lt;/strong>&lt;/p>
&lt;p>&lt;strong>答：&lt;strong>归档必须在至少一个类上启用。如果您刚刚通过 Setup、Move To Test、Move To Production 或 iTop Hub 扩展安装完成，请确保&lt;/strong>清空 Web 浏览器缓存&lt;/strong>，因为这是一个已知问题。&lt;/p>
&lt;p>&lt;strong>问：我可以在用户门户中看到&amp;quot;归档对象&amp;quot;吗？&lt;/strong>&lt;/p>
&lt;p>**答：**不，归档对象永远不能在任何用户门户中显示。&lt;/p>
&lt;hr>
&lt;p>原文：&lt;a href="https://www.itophub.io/wiki/page?id=3_2_0:feature:archiving">https://www.itophub.io/wiki/page?id=3_2_0:feature:archiving&lt;/a>&lt;/p>
&lt;p>版本：3_2_0/feature/archiving.txt · Last modified: 2024/09/10 10:25 by 127.0.0.1&lt;/p></description></item><item><title>Docs: 对象废弃</title><link>/docs/admin/object-obsolescence/</link><pubDate>Fri, 27 Jun 2025 00:00:00 +0000</pubDate><guid>/docs/admin/object-obsolescence/</guid><description>
&lt;div class="pageinfo pageinfo-primary">
&lt;p>iTop 2.4 引入，数据模型现在包含按对象类定义的废弃概念，以通过突出显示/隐藏废弃对象来改善用户体验。&lt;/p>
&lt;ul>
&lt;li>请参阅用户指南中的废弃用户体验。&lt;/li>
&lt;li>有关配置自己的废弃规则，请参阅教程：定义废弃规则。&lt;/li>
&lt;/ul>
&lt;/div>
&lt;h2 id="搜索废弃对象">搜索废弃对象&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sql" data-lang="sql">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">SELECT&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">Person&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">WHERE&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">obsolescence_flag&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="限制">限制&lt;/h2>
&lt;h2 id="默认废弃规则">默认废弃规则&lt;/h2>
&lt;h3 id="哪些对象被视为废弃">哪些对象被视为废弃？&lt;/h3>
&lt;p>一般而言：&lt;/p>
&lt;ul>
&lt;li>状态等于 obsolete 或 inactive 的对象&lt;/li>
&lt;li>作为另一个对象的子对象的对象，如果其主对象被废弃，则该对象也被废弃。例如：如果其 ConnectableCI 被废弃，则 Physical Interface 被废弃。此规则有两个例外：Virtual Machine 和 Hypervisor 仅当且仅当它们自己的状态为 obsolete 时才被废弃&lt;/li>
&lt;li>超过 15 个月前过期的许可证（搜索查询无法缓存，因此高容量时需谨慎）&lt;/li>
&lt;/ul>
&lt;h4 id="配置管理核心">配置管理核心&lt;/h4>
&lt;ul>
&lt;li>Contact: status=&amp;lsquo;inactive&amp;rsquo;&lt;/li>
&lt;li>Document: status=&amp;lsquo;obsolete&amp;rsquo;&lt;/li>
&lt;/ul>
&lt;h5 id="cis">CIs&lt;/h5>
&lt;ul>
&lt;li>Application Solution: status=&amp;lsquo;inactive&amp;rsquo;&lt;/li>
&lt;li>Business Process: status=&amp;lsquo;inactive&amp;rsquo;&lt;/li>
&lt;li>DB Server: status=&amp;lsquo;inactive&amp;rsquo;&lt;/li>
&lt;li>Database Schema: 其 DBServer 被废弃&lt;/li>
&lt;li>Middleware: status=&amp;lsquo;inactive&amp;rsquo;&lt;/li>
&lt;li>Middleware Instance: 其 Middleware 被废弃&lt;/li>
&lt;li>Network Device: status=&amp;lsquo;obsolete&amp;rsquo;&lt;/li>
&lt;li>Other Software: status=&amp;lsquo;inactive&amp;rsquo;&lt;/li>
&lt;li>PC Software: status=&amp;lsquo;inactive&amp;rsquo;&lt;/li>
&lt;li>Server: status=&amp;lsquo;obsolete&amp;rsquo;&lt;/li>
&lt;li>Web Application: 其 Web server 被废弃&lt;/li>
&lt;li>Web server: status=&amp;lsquo;inactive&amp;rsquo;&lt;/li>
&lt;/ul>
&lt;h5 id="其他">其他&lt;/h5>
&lt;ul>
&lt;li>Group: status=&amp;lsquo;obsolete&amp;rsquo;&lt;/li>
&lt;li>Location: status=&amp;lsquo;inactive&amp;rsquo;&lt;/li>
&lt;li>OSLicence: 许可证不是永久的，且定义了结束日期，并已超过 15 个月&lt;/li>
&lt;li>OSPatch: 未定义废弃&lt;/li>
&lt;li>Organization: status=&amp;lsquo;inactive&amp;rsquo;&lt;/li>
&lt;li>Physical Interface: 其 Device 被废弃&lt;/li>
&lt;li>Software: 未定义废弃&lt;/li>
&lt;li>Software Licence: 许可证不是永久的，且定义了结束日期，并已超过 15 个月&lt;/li>
&lt;li>Software Patch: 未定义废弃&lt;/li>
&lt;li>Subnet: 未定义废弃&lt;/li>
&lt;li>VLAN: 未定义废弃&lt;/li>
&lt;/ul>
&lt;h4 id="最终用户设备">最终用户设备&lt;/h4>
&lt;p>所有最终用户设备使用在 Physical Device 上定义的逻辑：status=&amp;lsquo;obsolete&amp;rsquo;&lt;/p>
&lt;h4 id="虚拟化管理">虚拟化管理&lt;/h4>
&lt;ul>
&lt;li>Farm: status=&amp;lsquo;obsolete&amp;rsquo;&lt;/li>
&lt;li>Hypervisor: status=&amp;lsquo;obsolete&amp;rsquo;&lt;/li>
&lt;li>Logical Interface: 其 Virtual Machine 被废弃&lt;/li>
&lt;li>Virtual Machine: status=&amp;lsquo;obsolete&amp;rsquo;&lt;/li>
&lt;/ul>
&lt;h4 id="高级存储">高级存储&lt;/h4>
&lt;ul>
&lt;li>Fiber Channel Interface: 其 Datacenter Device 被废弃&lt;/li>
&lt;li>Logical Volume: 其 Storage System 被废弃&lt;/li>
&lt;li>NAS: status=&amp;lsquo;obsolete&amp;rsquo;&lt;/li>
&lt;li>NAS File System: 其 NAS 被废弃&lt;/li>
&lt;li>SAN Switch: status=&amp;lsquo;obsolete&amp;rsquo;&lt;/li>
&lt;li>Storage System: status=&amp;lsquo;obsolete&amp;rsquo;&lt;/li>
&lt;li>Tape: 其 Tape Library 被废弃&lt;/li>
&lt;li>Tape Library: status=&amp;lsquo;obsolete&amp;rsquo;&lt;/li>
&lt;/ul>
&lt;h4 id="数据中心">数据中心&lt;/h4>
&lt;ul>
&lt;li>Enclosure: status=&amp;lsquo;obsolete&amp;rsquo;&lt;/li>
&lt;li>PDU: status=&amp;lsquo;obsolete&amp;rsquo;&lt;/li>
&lt;li>Power Source: status=&amp;lsquo;obsolete&amp;rsquo;&lt;/li>
&lt;li>Rack: status=&amp;lsquo;obsolete&amp;rsquo;&lt;/li>
&lt;/ul>
&lt;h4 id="工单">工单&lt;/h4>
&lt;p>自 2.5.0 起，工单不再定义废弃规则，因为它会降低性能。&lt;/p>
&lt;hr>
&lt;p>原文：&lt;a href="https://www.itophub.io/wiki/page?id=3_2_0:feature:obsolescence">https://www.itophub.io/wiki/page?id=3_2_0:feature:obsolescence&lt;/a>&lt;/p>
&lt;p>Last modified: 2024/09/10 10:25 by127.0.0.1&lt;/p>
&lt;p>版本：3_2_0/feature/obsolescence.txt · Last modified: 2024/09/10 10:25 by 127.0.0.1&lt;/p></description></item><item><title>Docs: iTop 日志</title><link>/docs/admin/18-log/</link><pubDate>Fri, 27 Jun 2025 00:00:00 +0000</pubDate><guid>/docs/admin/18-log/</guid><description>
&lt;div class="pageinfo pageinfo-primary">
&lt;p>与许多其他应用一样，iTop 在日志文件中写入大量有用的信息。它们都可以在 iTop 根目录下的 log 目录中找到。&lt;/p>
&lt;p>请注意，此目录不应被 Web 用户读取：请参阅安全关键目录访问。&lt;/p>
&lt;/div>
&lt;h2 id="文件">文件&lt;/h2>
&lt;h3 id="setup">Setup&lt;/h3>
&lt;ul>
&lt;li>&lt;code>setup.log&lt;/code>&lt;/li>
&lt;li>&lt;code>install-&amp;lt;date&amp;gt;.xml&lt;/code>：安装向导中做出的选择摘要&lt;/li>
&lt;li>&lt;code>setup-queries-&amp;lt;date&amp;gt;_&amp;lt;time&amp;gt;.sql&lt;/code>：在&amp;quot;更新数据库架构&amp;quot;步骤期间发送到 DB 的查询列表&lt;/li>
&lt;/ul>
&lt;h3 id="itop-应用">iTop 应用&lt;/h3>
&lt;ul>
&lt;li>&lt;code>error.log&lt;/code>&lt;/li>
&lt;li>&lt;code>deadlocks.log&lt;/code>（自 iTop 2.7.1 起）：数据库死锁的附加跟踪信息&lt;/li>
&lt;li>&lt;code>deprecated-calls.log&lt;/code>（自 iTop 3.0.0 起）：对已弃用 PHP 方法或文件的调用&lt;/li>
&lt;li>&lt;code>tools.log&lt;/code>：工具错误，当前仅用于备份&lt;/li>
&lt;/ul>
&lt;h2 id="数据库">数据库&lt;/h2>
&lt;p>除了文件之外，在发生未捕获的异常时，iTop 可以将日志写入 &lt;code>EventIssue&lt;/code> 类。您可以使用以下查询访问它们：在&amp;quot;运行查询&amp;quot;菜单中执行 &lt;code>SELECT EventIssue&lt;/code>。&lt;/p>
&lt;p>并非所有异常都会被写入（例如，REST 服务异常不会）。总体而言，如果满足以下条件，它们会被写入：&lt;/p>
&lt;ul>
&lt;li>问题发生在标准页面中（在 UI.php 下）&lt;/li>
&lt;li>问题发生在门户页面中，并且存在适当的 &lt;code>log_level_min.write_in_db&lt;/code> 级别（请参阅下面的 &lt;code>filter_portal_exceptions&lt;/code>）&lt;/li>
&lt;/ul>
&lt;h2 id="配置">配置&lt;/h2>
&lt;h3 id="日志轮转">日志轮转&lt;/h3>
&lt;p>自 iTop 2.7.0 起，日志文件每月轮转。这意味着上个月的日志会加上后缀 &lt;code>&amp;lt;year&amp;gt;-month&amp;lt;month_no&amp;gt;&lt;/code>。例如，如果我们在 2021 年 2 月，当前错误日志是 &lt;code>error.log&lt;/code>，而上个月（2021 年 1 月）的错误日志是 &lt;code>error.2021-month01.log&lt;/code>。&lt;/p>
&lt;p>轮转周期可以在 iTop 配置中使用 &lt;code>log_filename_builder_impl&lt;/code> 参数进行配置。可能的值：&lt;/p>
&lt;ul>
&lt;li>&lt;code>DefaultLogFileNameBuilder&lt;/code>：不轮转&lt;/li>
&lt;li>&lt;code>DailyRotatingLogFileNameBuilder&lt;/code>：后缀 &lt;code>&amp;lt;year&amp;gt;-&amp;lt;month_no&amp;gt;_&amp;lt;day_no&amp;gt;&lt;/code>&lt;/li>
&lt;li>&lt;code>WeeklyRotatingLogFileNameBuilder&lt;/code>：后缀 &lt;code>&amp;lt;year&amp;gt;-week&amp;lt;week_no&amp;gt;&lt;/code>&lt;/li>
&lt;li>&lt;code>MonthlyRotatingLogFileNameBuilder&lt;/code>：后缀 &lt;code>&amp;lt;year&amp;gt;-month&amp;lt;month_no&amp;gt;&lt;/code>&lt;/li>
&lt;/ul>
&lt;p>自动日志清除：您可以使用 &lt;code>log_purge.enabled&lt;/code> 参数激活清除（默认禁用）。您可以使用 &lt;code>log_purge.max_keep_days&lt;/code> 参数定义日志保留时间（默认 365 天）。&lt;/p>
&lt;h3 id="过滤日志">过滤日志&lt;/h3>
&lt;p>自 iTop 2.7.0 起，&lt;code>log_level_min&lt;/code> 配置参数允许过滤日志。这允许按通道指定要保留的日志级别。&lt;/p>
&lt;p>级别按以下层次结构包含（值对应 LogAPI 类常量）：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-php" data-lang="php">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">abstract&lt;/span> &lt;span style="color:#204a87;font-weight:bold">class&lt;/span> &lt;span style="color:#000">LogAPI&lt;/span> &lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">public&lt;/span> &lt;span style="color:#204a87;font-weight:bold">const&lt;/span> &lt;span style="color:#000">LEVEL_ERROR&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;Error&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">public&lt;/span> &lt;span style="color:#204a87;font-weight:bold">const&lt;/span> &lt;span style="color:#000">LEVEL_WARNING&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;Warning&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">public&lt;/span> &lt;span style="color:#204a87;font-weight:bold">const&lt;/span> &lt;span style="color:#000">LEVEL_INFO&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;Info&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">public&lt;/span> &lt;span style="color:#204a87;font-weight:bold">const&lt;/span> &lt;span style="color:#000">LEVEL_OK&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;Ok&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">public&lt;/span> &lt;span style="color:#204a87;font-weight:bold">const&lt;/span> &lt;span style="color:#000">LEVEL_DEBUG&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;Debug&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">public&lt;/span> &lt;span style="color:#204a87;font-weight:bold">const&lt;/span> &lt;span style="color:#000">LEVEL_TRACE&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;Trace&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>因此，例如过滤 LEVEL_INFO 将包含以下级别的日志：LEVEL_INFO、LEVEL_WARNING、LEVEL_ERROR。&lt;/p>
&lt;p>要将级别应用于所有通道，只需在 iTop 配置文件中设置以下参数值，如下例所示。请注意，自 2.7.5 和 3.0.0 起，iTop 核心通道在 &lt;code>LogChannels&lt;/code> 类中分组。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-php" data-lang="php">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&amp;#39;log_level_min&amp;#39;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#000">LogAPI&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">::&lt;/span>&lt;span style="color:#c4a000">LEVEL_TRACE&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>要按通道设置特定级别：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-php" data-lang="php">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&amp;#39;log_level_min&amp;#39;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#204a87;font-weight:bold">array&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">LogChannels&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">::&lt;/span>&lt;span style="color:#c4a000">INLINE_IMAGE&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#000">LogAPI&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">::&lt;/span>&lt;span style="color:#c4a000">LEVEL_TRACE&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#39;UserRequest&amp;#39;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#000">LogAPI&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">::&lt;/span>&lt;span style="color:#c4a000">LEVEL_TRACE&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#39;MyCustomExtension&amp;#39;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#000">LogAPI&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">::&lt;/span>&lt;span style="color:#c4a000">LEVEL_INFO&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000;font-weight:bold">),&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>由于默认日志通道（\LogAPI::CHANNEL_DEFAULT）是 &amp;ldquo;&amp;quot;（空字符串），您也可以这样做：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-php" data-lang="php">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&amp;#39;log_level_min&amp;#39;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#204a87;font-weight:bold">array&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#39;&amp;#39;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#000">LogAPI&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">::&lt;/span>&lt;span style="color:#c4a000">LEVEL_WARNING&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">LogChannels&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">::&lt;/span>&lt;span style="color:#c4a000">INLINE_IMAGE&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#000">LogAPI&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">::&lt;/span>&lt;span style="color:#c4a000">LEVEL_TRACE&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#39;UserRequest&amp;#39;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#000">LogAPI&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">::&lt;/span>&lt;span style="color:#c4a000">LEVEL_TRACE&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#39;MyCustomExtension&amp;#39;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#000">LogAPI&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">::&lt;/span>&lt;span style="color:#c4a000">LEVEL_INFO&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000;font-weight:bold">),&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>现有通道在专门的 wiki 页面中详细说明：iTop logs channels。&lt;/p>
&lt;p>以下示例均无效：&lt;/p>
&lt;ul>
&lt;li>&lt;code>'MyChannel' =&amp;gt; LEVEL_WARNING,&lt;/code>&lt;/li>
&lt;li>&lt;code>'MyChannel' =&amp;gt; '',&lt;/code>&lt;/li>
&lt;li>&lt;code>'MyChannel' =&amp;gt; 'LogAPI::LEVEL_WARNING',&lt;/code>&lt;/li>
&lt;li>&lt;code>'MyChannel' =&amp;gt; 'warning',&lt;/code>&lt;/li>
&lt;/ul>
&lt;h3 id="为-itsm-designer-中的-php-开发人员">为 ITSM Designer 中的 PHP 开发人员&lt;/h3>
&lt;p>为了调试您在 ITSM Designer 中创建的 PHP 方法，您可以：&lt;/p>
&lt;ol>
&lt;li>在方法中添加调试跟踪到专用通道 Delta XML&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-php" data-lang="php">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">public&lt;/span> &lt;span style="color:#204a87;font-weight:bold">function&lt;/span> &lt;span style="color:#000">UpdateParentTicketLog&lt;/span>&lt;span style="color:#000;font-weight:bold">()&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">IssueLog&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">::&lt;/span>&lt;span style="color:#c4a000">Debug&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;Entering UpdateParentTicketLog&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>&lt;span style="color:#4e9a06">&amp;#39;Delta XML&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">$oLog&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#000">$this&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">-&amp;gt;&lt;/span>&lt;span style="color:#c4a000">Get&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#39;log&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">$sLog&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#000">$oLog&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">-&amp;gt;&lt;/span>&lt;span style="color:#c4a000">GetModifiedEntry&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#39;html&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">IssueLog&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">::&lt;/span>&lt;span style="color:#c4a000">Debug&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;Modified entry:&lt;/span>&lt;span style="color:#4e9a06">$sLog&lt;/span>&lt;span style="color:#4e9a06">.&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>&lt;span style="color:#4e9a06">&amp;#39;Delta XML&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#000">$sLog&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">!=&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">IssueLog&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">::&lt;/span>&lt;span style="color:#c4a000">Debug&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;Test (sLog != chaine vide) == true&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>&lt;span style="color:#4e9a06">&amp;#39;Delta XML&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">$oTicket&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#000">MetaModel&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">::&lt;/span>&lt;span style="color:#c4a000">GetObject&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#39;Ticket&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span> &lt;span style="color:#000">$this&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">-&amp;gt;&lt;/span>&lt;span style="color:#c4a000">Get&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#39;ticket_id&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">),&lt;/span> &lt;span style="color:#204a87;font-weight:bold">false&lt;/span>&lt;span style="color:#000;font-weight:bold">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#000">$oTicket&lt;/span>&lt;span style="color:#000;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">IssueLog&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">::&lt;/span>&lt;span style="color:#c4a000">Debug&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;Test (oTicket) == true&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>&lt;span style="color:#4e9a06">&amp;#39;Delta XML&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">$oTicket&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">-&amp;gt;&lt;/span>&lt;span style="color:#c4a000">Set&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#39;private_log&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span> &lt;span style="color:#000">$sLog&lt;/span>&lt;span style="color:#000;font-weight:bold">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">$oTicket&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">-&amp;gt;&lt;/span>&lt;span style="color:#c4a000">DBUpdate&lt;/span>&lt;span style="color:#000;font-weight:bold">();&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="2">
&lt;li>在 iTop 配置文件中激活它们&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-php" data-lang="php">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&amp;#39;log_level_min&amp;#39;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#204a87;font-weight:bold">array&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#39;Delta XML&amp;#39;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#000">LogAPI&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">::&lt;/span>&lt;span style="color:#c4a000">LEVEL_DEBUG&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000;font-weight:bold">),&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="3">
&lt;li>在 iTop 中导航以触发您正在调试的方法&lt;/li>
&lt;li>检查日志以查看结果&lt;/li>
&lt;/ol>
&lt;h3 id="异常日志记录">异常日志记录&lt;/h3>
&lt;p>自 iTop 3.0 起，可以使用 &lt;code>\ExceptionLog::LogException($oException);&lt;/code> 记录异常。&lt;/p>
&lt;p>您可以像往常一样使用 &lt;code>log_level_min&lt;/code> 和 &lt;code>log_level_min.write_in_db&lt;/code> 配置其行为。通道必须是异常的类，如果未找到，它将尝试所有父树直到 Exception。&lt;/p>
&lt;p>当没有配置存在时，请注意数据库日志记录对 Error 级别启用。&lt;/p>
&lt;h4 id="过滤门户异常">过滤门户异常&lt;/h4>
&lt;p>门户触发 &amp;ldquo;Warning&amp;rdquo; 异常，默认情况下不会写入数据库日志。&lt;/p>
&lt;p>例如，要启用其中一些，您可以配置：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-php" data-lang="php">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&amp;#39;log_level_min.write_in_db&amp;#39;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#204a87;font-weight:bold">array&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#39;CoreCannotSaveObjectException&amp;#39;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#000">LogAPI&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">::&lt;/span>&lt;span style="color:#c4a000">LEVEL_WARNING&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#39;CoreOqlException&amp;#39;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#000">LogAPI&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">::&lt;/span>&lt;span style="color:#c4a000">LEVEL_WARNING&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000;font-weight:bold">),&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="扩展开发人员">扩展开发人员&lt;/h4>
&lt;p>由于此行为是通用的，扩展开发人员可以通过调用 &lt;code>\ExceptionLog::LogException($oException);&lt;/code> 来使用它。&lt;/p>
&lt;p>在这种情况下，建议抛出特定的异常，以便能够按类过滤它们。&lt;/p>
&lt;h2 id="模块开发人员如何记录日志">模块开发人员如何记录日志&lt;/h2>
&lt;p>最简单的答案：使用 IssueLog 类及其静态日志记录方法：Trace、Ok、Info、Warning、Error。&lt;/p>
&lt;p>如果使用特定通道，您应该在模块的文档中说明！&lt;/p>
&lt;p>如果您想记录到特定文件和/或自定义行为，您可以创建自己的日志实现！扩展 LogAPI 抽象类会有所帮助。如果是这样，请不要忘记：&lt;/p>
&lt;ul>
&lt;li>调用 Enable 方法！此外，您可以覆盖它以记录到特定文件路径（例如参见 \DeadLockLog::Enable）&lt;/li>
&lt;li>将适当的 LEVEL_DEFAULT 常量值设置为您的实现，设置为 LEVEL_* 常量之一&lt;/li>
&lt;li>记录文档！;)&lt;/li>
&lt;/ul>
&lt;p>您还可以通过实现 iLogFileNameBuilder 接口或 RotatingLogFileNameBuilder 抽象类来添加新的轮转行为。&lt;/p>
&lt;hr>
&lt;p>原文：&lt;a href="https://www.itophub.io/wiki/page?id=3_2_0:admin:log">https://www.itophub.io/wiki/page?id=3_2_0:admin:log&lt;/a>&lt;/p>
&lt;p>版本：3_2_0/admin/log.txt · Last modified: 2025/10/02 19:16 by 127.0.0.1&lt;/p></description></item><item><title>Docs: HTML 格式限制</title><link>/docs/admin/html-formatting-limitations/</link><pubDate>Thu, 26 Jun 2025 00:00:00 +0000</pubDate><guid>/docs/admin/html-formatting-limitations/</guid><description>
&lt;div class="pageinfo pageinfo-primary">
&lt;p>自 iTop 2.3.0 起，某些字段（例如案例日志条目和工单的描述）支持富文本格式。&lt;/p>
&lt;p>此格式使用 HTML 标记实现。这对于在浏览器中显示、在线所见即所得编辑以及从 HTML 邮件导入很方便。&lt;/p>
&lt;p>然而，在基于 Web 的应用程序中插入任何类型的 HTML 标记是不可接受的，因为它为各种恶意注入打开了大门。因此，HTML 标记在记录到 iTop 数据库之前总是经过&lt;strong>清理过程&lt;/strong>。此清理基于 HTML 标签名、属性和样式的&lt;strong>白名单&lt;/strong>。&lt;/p>
&lt;ul>
&lt;li>任何不在&lt;strong>标签白名单&lt;/strong>中的标签都会被完全移除（包括子标签）&lt;/li>
&lt;li>任何不在&lt;strong>属性白名单&lt;/strong>中的属性（对于考虑的标签）都会被移除&lt;/li>
&lt;li>任何不在&lt;strong>样式白名单&lt;/strong>中的样式都会被移除&lt;/li>
&lt;li>最后，唯一接受的 URL 方案（在 href 和 src 属性中）是：http:、https:、mailto: 和 data:。&lt;/li>
&lt;/ul>
&lt;/div>
&lt;h2 id="标签和属性白名单">标签和属性白名单&lt;/h2>
&lt;p>以下标签在清理要存储在 iTop 中的 HTML 时被保留。对于每个标签，下表列出了允许的属性。&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>HTML 标签&lt;/th>
&lt;th>允许的属性&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>a&lt;/td>
&lt;td>href、name、style、target、title&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>b&lt;/td>
&lt;td>无&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>big&lt;/td>
&lt;td>无&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>blockquote&lt;/td>
&lt;td>style&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>body&lt;/td>
&lt;td>无&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>br&lt;/td>
&lt;td>无&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>caption&lt;/td>
&lt;td>无&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>center&lt;/td>
&lt;td>无&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>cite&lt;/td>
&lt;td>无&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>code&lt;/td>
&lt;td>无&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>code&lt;/td>
&lt;td>style&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>del&lt;/td>
&lt;td>无&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>div&lt;/td>
&lt;td>style&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>em&lt;/td>
&lt;td>无&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>fieldset&lt;/td>
&lt;td>style&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>font&lt;/td>
&lt;td>face、color、style、size&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>h1&lt;/td>
&lt;td>style&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>h2&lt;/td>
&lt;td>style&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>h3&lt;/td>
&lt;td>style&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>h4&lt;/td>
&lt;td>style&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>hr&lt;/td>
&lt;td>style&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>html&lt;/td>
&lt;td>无&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>i&lt;/td>
&lt;td>无&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>img&lt;/td>
&lt;td>src、style、alt、title&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>ins&lt;/td>
&lt;td>无&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>kbd&lt;/td>
&lt;td>无&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>legend&lt;/td>
&lt;td>style&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>li&lt;/td>
&lt;td>style、value&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>nav&lt;/td>
&lt;td>style&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>ol&lt;/td>
&lt;td>reversed、start、style、type&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>p&lt;/td>
&lt;td>style&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>pre&lt;/td>
&lt;td>无&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>q&lt;/td>
&lt;td>无&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>s&lt;/td>
&lt;td>无&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>samp&lt;/td>
&lt;td>无&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>section&lt;/td>
&lt;td>style&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>small&lt;/td>
&lt;td>无&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>span&lt;/td>
&lt;td>style&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>strong&lt;/td>
&lt;td>无&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>table&lt;/td>
&lt;td>style、width、summary、align、border、cellpadding、cellspacing&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>tbody&lt;/td>
&lt;td>style&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>td&lt;/td>
&lt;td>style、colspan&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>th&lt;/td>
&lt;td>style&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>thead&lt;/td>
&lt;td>style&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>tr&lt;/td>
&lt;td>style&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>tt&lt;/td>
&lt;td>无&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>u&lt;/td>
&lt;td>无&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>ul&lt;/td>
&lt;td>style&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>var&lt;/td>
&lt;td>无&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="样式白名单">样式白名单&lt;/h2>
&lt;p>以下样式是允许在 style 属性内使用的唯一项（对于允许 style 的标签）：&lt;/p>
&lt;p>&lt;code>background-color&lt;/code>、&lt;code>border&lt;/code>、&lt;code>border-collapse&lt;/code>、&lt;code>bordercolor&lt;/code>、&lt;code>cellpadding&lt;/code>、&lt;code>cellspacing&lt;/code>、&lt;code>color&lt;/code>、&lt;code>float&lt;/code>、&lt;code>font&lt;/code>、&lt;code>font-family&lt;/code>、&lt;code>font-size&lt;/code>、&lt;code>font-style&lt;/code>、&lt;code>height&lt;/code>、&lt;code>margin&lt;/code>、&lt;code>padding&lt;/code>、&lt;code>text-align&lt;/code>、&lt;code>vertical-align&lt;/code>、&lt;code>width&lt;/code>、&lt;code>white-space&lt;/code>&lt;/p>
&lt;h2 id="禁用清理器">禁用清理器&lt;/h2>
&lt;ul>
&lt;li>&lt;code>HTMLDOMSanitizer&lt;/code>：默认&lt;/li>
&lt;li>&lt;code>HTMLPurifierSanitizer&lt;/code>：???&lt;/li>
&lt;li>&lt;code>HTMLNullSanitizer&lt;/code>：完全不清理&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-php" data-lang="php">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&amp;#39;html_sanitizer&amp;#39;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;HTMLNullSanitizer&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;p>原文：&lt;a href="https://www.itophub.io/wiki/page?id=3_2_0:admin:rich_text_limitations">https://www.itophub.io/wiki/page?id=3_2_0:admin:rich_text_limitations&lt;/a>&lt;/p>
&lt;p>2024/09/10 10:25 by127.0.0.1&lt;/p>
&lt;p>版本：3_2_0/admin/rich_text_limitations.txt · Last modified: 2024/09/10 10:25 by 127.0.0.1&lt;/p></description></item></channel></rss>