用户管理
概述
本文档介绍 PlantPulse 平台的用户账户、安全组及权限管理方法。
用户管理在左侧菜单 System > 用户 (/user/index) 中进行。
用户结构
PlantPulse 的用户管理由三个核心要素组成。
- 用户(User): 登录平台的单个账户。
- 安全组(Security Group): 定义用户角色的组。每个用户属于一个安全组。
- 权限(Permission): 分配给安全组的各功能访问权限。控制菜单、画面和 API 的访问。
三种角色
产品提供的角色仅有三种。
| 角色 | 画面显示 | 用途 |
|---|---|---|
ADMIN | 系统管理员 | 全部功能。可更改他人密码,可管理用户 |
API | API 开发人员 | 外部系统集成账户 |
USER | 普通用户 | 基本功能 |
旧文档中曾出现这些名称,但产品中并不存在这些角色。在用户注册画面的角色选项中也不会出现。
MANAGER 仅是“半个”角色 — 请不要使用MANAGER 与上面三种情况不同。
| 用户注册画面 | 选项列表中没有。保存路径仅接受 ADMIN·API·USER |
| 服务器访问控制 | 有 — 设备指令执行规则、标签·连接·报警画面的写入按钮显示条件为“ADMIN 或 MANAGER” |
POST /api/v5/user | 不检查角色值,MANAGER 会原样保存 |
| 登录后 | 跳转分支仅 ADMIN·API → 仪表盘,USER → 共享画面两种 — MANAGER 账户会在加载画面卡住 |
因此,通过 API 设置 MANAGER 等同于让账户无法使用。
如果已有此类账户,请将角色更改为三者之一。
最小权限原则: 人工使用的账户从
USER开始,仅向需要管理的人员授予ADMIN。
用户属性
| 属性 | 必填 | 说明 |
|---|---|---|
| 用户 ID | 是 | 用于登录的唯一标识符(英文字母、数字,4~20个字符) |
| 用户名 | 是 | 画面上显示的名称 |
| 密码 | 是 | 登录密码(12~50个字符,请参见下方密码策略) |
| 邮箱 | - | 接收通知的电子邮件地址 |
| 角色 | 是 | ADMIN / API / USER 之一 |
| 状态 | 是 | 启用(Active)或禁用(Inactive) |
| 说明 | - | 关于用户的备注 |
| 创建时间 | 自动 | 账户创建日期时间 |
| 最后登录 | 自动 | 最后一次登录日期时间 |
查看用户列表
选择左侧菜单 System > 用户 即可查看已注册的用户列表。
- URL:
/user/index - 可查看用户 ID、姓名、安全组、状态、最后登录日期时间。
- 可使用搜索筛选器快速查找特定用户。
提示: 只有属于 ADMIN 安全组的用户才能查看用户列表。
添加用户
- 在用户列表画面中,点击添加按钮。
- 输入必填项。
- 用户 ID: 由英文字母和数字组成的唯一 ID(4~20个字符)
- 用户名: 将在画面上显示的名称
- 密码: 12~50个字符,且必须包含英文大写字母、小写字母、数字、特殊字符四类中的至少三类。不满足要求时,保存将被拒绝。
- 角色: 选择
ADMIN/API/USER之一。
- 根据需要输入可选项目(邮箱、说明等)。
- 点击保存按钮。
注意: 用户 ID 创建后无法更改。请谨慎设置。
编辑用户
- 在用户列表中点击要编辑的用户。
- 更改可编辑的项目(姓名、邮箱、安全组、状态、说明等)。
- 点击保存按钮。
提示: 用户 ID 无法编辑。如需更改 ID,需删除原有用户并重新创建。
删除用户
- 在用户列表中选择要删除的用户。
- 点击删除按钮。
- 在确认弹窗中点击确认。
警告: 已删除的用户无法恢复。如需临时阻止用户登录,建议使用禁用而非删除。
禁用用户
如果希望在不删除账户的情况下阻止登录,可使用禁用功能。
- 在用户编辑画面中,将状态更改为
Inactive。 - 点击保存按钮。
被禁用的用户无法登录,但其数据(审计日志、设置历史等)将被保留。如需重新启用,请将状态更改为 Active。
密码管理
密码仅在一个画面中更改 — 即左侧菜单 System > 用户 列表。
更改密码(替换默认密码)
安装后更改默认密码的方法如下。
- 打开左侧菜单 System > 用户。
- 点击目标用户所在行的 🔑 钥匙图标(工具提示:“更改密码”)。
- 输入新密码。如果是本人的账户,还需同时输入当前密码。
- 保存。
谁能更改谁的密码有明确规则。
| 目标 | 所需权限 | 是否需要当前密码 |
|---|---|---|
| 本人 | 无(只需已登录) | 需要 — 错误则拒绝 |
| 其他用户 | ADMIN | 不需要 |
若非
ADMIN用户尝试更改他人密码,请求将被拒绝,并在服务器日志中留下审计记录。 成功的更改也会以Password changed: session_user=[...], target_user=[...]形式记录。
也可以通过 REST API 完成同样的操作。
POST /api/v5/user/{user_id}/password
Content-Type: application/json
{ "current_password": "<current-password>", "password": "<new-password>" }
遗忘密码处理
- 请管理员处理: 由
ADMIN用户按上述流程重置。 - 直接初始化数据库(紧急情况下): 仅当包括
ADMIN账户在内全部锁定时使用。
密码以 BCrypt 哈希存储。若按旧文档中的
encode(digest(..., 'sha256'), 'hex') 方式写入值,登录时 BCrypt 验证将无法解析该字符串,
导致使用任何密码都无法登录。 由于这是本就在锁定状态下使用的流程,恢复手段将彻底消失。
表名也不是 pp_user,而是 USER_LOGIN。
先创建 BCrypt 哈希,然后写入该值。
# BCrypt 해시 생성 (htpasswd — apache2-utils / httpd-tools 패키지)
htpasswd -bnBC 10 "" '<new-password>' | tr -d ':\n'
# → $2y$10$... 형태의 문자열이 나옵니다
-- 비상 시에만. 위에서 만든 BCrypt 해시를 그대로 넣습니다.
UPDATE USER_LOGIN
SET PASSWORD = '<$2y$10$... paste-here>'
WHERE USER_ID = 'admin';
写入后必须立即用登录确认,成功后再通过画面按正常流程更改一次密码。 基础设施服务账户(PostgreSQL·Aster TSDB·RustFS等)的密码请遵循 更改密码(凭证轮换) — 顺序一旦打乱,平台将无法启动。
密码策略
产品强制要求项 — 违反以下任一项,保存本身将被拒绝。
| 项目 | 值 |
|---|---|
| 长度 | 12个字符或以上,50个字符或以下 |
| 复杂度 | 英文大写字母 · 小写字母 · 数字 · 特殊字符四类中至少三类 |
产品不强制要求项 — 需要通过运营规范来管理。以下项目平台未提供功能,如有需要,请通过组织流程来保障。
| 项目 | 状态 |
|---|---|
| 强制更改周期 · 过期 | 无 |
| 禁止重用旧密码 | 无 |
| 字典词拦截 | 无 |
| 账户永久锁定 | 无 — 取而代之的是下方的临时阻断 |
暴力破解阻断(临时阻断)
登录失败累积后,不是锁定账户,而是在特定时间内阻止请求
(HTTP 429 + Retry-After)。时间过后会自动解除,因此无需管理员干预。
| 设置 | 属性 | 默认值 |
|---|---|---|
| 功能启用 | engine.session.bruteforce.enabled | 启用 |
| 每个 IP 允许失败次数 | engine.session.bruteforce.ip_limit | 30次 |
| 每个账户允许失败次数 | engine.session.bruteforce.user_limit | 10次 |
| 统计窗口 | engine.session.bruteforce.window.seconds | 300秒(5分钟) |
阻断分别基于 IP 和账户两个维度计算。办公室等多人共用同一公网 IP 的环境下,他人的失败也会累计到 IP 限额(30次)。 阻断和失败均会记录在审计日志(
LOGIN_BLOCKED/LOGIN_FAILURE)中。
安全组管理
默认安全组
PlantPulse 提供三个默认安全组。
| 安全组 | 说明 | 主要权限 |
|---|---|---|
| ADMIN | 系统管理员 | 全部功能访问(用户管理、系统设置、所有菜单) |
| OPERATOR | 操作员 | 运营相关功能访问(监控、报警管理、数据查询) |
| USER | 普通用户 | 基本功能访问(仪表盘查看、数据查询) |
添加安全组
除默认组外,可根据组织角色添加额外安全组。
- 选择安全管理 > 安全组菜单。
- 点击添加按钮。
- 输入组 ID、组名、说明。
- 点击保存按钮。
权限设置
为安全组设置菜单及功能权限。
- 在安全管理 > 安全组菜单中选择组。
- 点击权限设置选项卡。
- 为每个菜单/功能勾选读取、写入、删除权限。
- 点击保存按钮。
权限设置示例:
| 菜单 | ADMIN | OPERATOR | USER |
|---|---|---|---|
| 连接管理 | 读取/写入/删除 | 读取/写入 | 读取 |
| 工厂管理 | 读取/写入/删除 | 读取/写入 | 读取 |
| 报警管理 | 读取/写入/删除 | 读取/写入 | 读取 |
| 用户管理 | 读取/写入/删除 | - | - |
| 系统设置 | 读取/写入/删除 | 读取 | - |
| 画布 | 读取/写入/删除 | 读取/写入 | 读取 |
访问控制
站点访问控制
在多站点环境下,可限制每个用户可访问的站点。
- 在用户编辑画面中,选择站点访问权限选项卡。
- 勾选允许访问的站点。
- 点击保存按钮。
提示: 未设置站点访问权限的用户可访问所有站点。
画布共享
画布画面可与特定用户或安全组共享。
- 在画布编辑画面中,点击共享设置。
- 选择共享对象。
- 完全公开: 所有用户均可访问。
- 安全组: 仅选定的安全组用户可访问。
- 指定用户: 仅选定的用户可访问。
- 点击保存按钮。
会话管理
会话超时
用户会话超时默认为30分钟。30分钟内无活动将自动注销。
如需更改会话超时,请在 web.xml 中修改设置。
<!-- WEB-INF/web.xml inside the webapp (bundled in the WAR — reset on deploy, so change it in the source) -->
<session-config>
<session-timeout>30</session-timeout> <!-- in minutes -->
</session-config>
并发登录
默认情况下,同一账户可在多个浏览器/设备上同时登录。在安全要求较高的环境中,建议为每个用户单独签发账户,并通过 IP 访问限制等网络级控制作为补充。
审计日志
用户的主要活动会自动记录在审计日志中。通过审计日志可追踪系统变更历史。
记录的活动:
| 活动类型 | 说明 |
|---|---|
| 登录/注销 | 用户认证事件 |
| 用户管理 | 用户创建、编辑、删除、禁用 |
| 安全组变更 | 组创建、编辑、删除、权限变更 |
| 系统设置变更 | 属性、连接信息等设置更改 |
| 数据修改 | 工厂、设备、点位等主数据变更 |
审计日志可在工具 > 审计日志菜单中查看,并可按时间段、用户、活动类型进行筛选。
批量用户注册
如需一次性注册多个用户,可使用 Excel 文件进行批量注册。
注册流程
- 在安全管理 > 用户管理菜单中,点击Excel 上传按钮。
- 下载 Excel 模板文件。
- 按模板格式填写用户信息。
| 列 | 必填 | 说明 | 示例 |
|---|---|---|---|
| user_id | 是 | 用户 ID | operator01 |
| user_name | 是 | 用户名 | 홍길동 |
| password | 是 | 初始密码 | Temp1234! |
| - | 邮箱 | hong@example.com | |
| security_group | 是 | 安全组 ID | OPERATOR |
| description | - | 说明 | 생산1팀 |
- 上传填写好的 Excel 文件。
- 在预览画面中确认要注册的用户信息。
- 点击注册按钮。
提示: 上传时会进行有效性验证。如存在重复 ID、缺少必填项等错误,会显示对应行,可在修改后重新上传。
最佳实践
- 最小权限原则: 仅向用户分配业务所需的最小权限。
- 最小化管理账户: ADMIN 组用户保持在最少数量,日常运营请使用 OPERATOR 组。
- 定期审计: 每季度检查用户列表和权限,禁用不必要的账户。
- 离职员工处理: 离职时立即禁用或删除其账户。
- 禁止共享账户: 请使用个人账户,避免使用共享账户。
- 密码管理: 引导用户必须更改初始密码,并鼓励定期更换密码。
- 日志监控: 监控异常登录尝试(连续失败、非工作时间访问等)。
常见问题
登录失败
| 症状 | 原因 | 解决方法 |
|---|---|---|
| 登录失败 请重新确认用户名或密码。 | 用户名输入错误 · 密码错误 · 账户不存在 · 账户被禁用 — 四种情况均为同一提示 | 重新确认用户名和密码(含大小写)。若仍不行,请在用户列表中确认账户是否有效 |
登录尝试次数过多(请在N秒后重试) | 连续失败导致阻断(HTTP 429) | 按提示等待相应秒数。这不是管理员可解锁的锁定 —— 时间过后会自动解除 |
| 登录画面不显示 | Web 服务器未运行或网络问题 | 请检查服务器状态和网络连接 |
连续失败阻断仅通过时间窗口解除(默认为300秒)——管理员画面中没有解除按钮。
如有咨询,正确答案是“稍等几秒后再试”。
如需更改阈值,请参考登录失败时应对中的
engine.session.bruteforce.*。
被禁用的账户也会显示与密码错误相同的提示。用户无法得知自己的账户是否被禁用, 因此管理员需要代为在列表中确认状态。
权限不足
| 症状 | 原因 | 解决方法 |
|---|---|---|
| 菜单不显示 | 安全组无该菜单访问权限 | 请向管理员申请添加权限。 |
| 显示“无访问权限”消息 | API 或功能权限不足 | 请确认安全组的权限设置。 |
| 特定站点数据不显示 | 站点访问权限未设置 | 请确认用户的站点访问权限。 |
会话过期
| 症状 | 原因 | 解决方法 |
|---|---|---|
| 操作中跳转至登录画面 | 会话超时(默认30分钟) | 请重新登录。若超时时间过短,请在 web.xml 中调整。 |
| 在其他设备上被注销 | 并发登录策略(KICK)强制下线 | 请确认并发登录设置。 |
| 反复出现会话相关错误 | Redis 缓存故障 | 请检查 Redis 服务状态。 |