# Raft KV Web Admin `web_admin` 是一个用于管理 Raft KV 存储集群的轻量级 Web 界面。它作为一个独立的 HTTP 服务运行,通过 TCP 协议连接到 Raft 节点,提供可视化的数据管理和权限控制功能。 ## 架构概览 该工具由两部分组成: 1. **后端代理 (Go)**: 一个简单的 HTTP 服务器,负责托管静态页面并将前端的 REST API 请求转换为 TCP 指令转发给 Raft 节点。 2. **前端界面 (HTML/Alpine.js)**: 一个单页应用 (SPA),提供用户友好的操作界面。 ### 技术栈 - **后端**: Go (标准库), TCP 连接池 - **前端**: HTML5, Tailwind CSS (样式), Alpine.js (交互逻辑) ## 功能特性 ### 1. 认证与安全 - **登录/登出**: 支持基于用户名/密码(及可选 OTP)的身份验证。 - **会话管理**: 使用 Token 进行会话保持,支持自动过期处理。 ### 2. 仪表盘 (Dashboard) - **实时集群状态 (Cluster Status)**: 实时显示节点状态(ID, Role, Term)、存储使用情况(DB/Log Size, Memory)、共识进度(Commit/Applied Index)及集群成员列表。 - **Web CLI**: 提供完整的命令执行环境,支持 `INFO`, `SEARCH`, `COUNT`, `JOIN`, `LEAVE` 以及 `GET`/`SET`/`DEL` 等所有标准 Raft CLI 命令,方便远程运维和调试。 ### 3. KV 数据管理 (KV Explorer) - **数据操作**: 提供图形化界面进行 `GET` (查询)、`SET` (设置) 和 `DEL` (删除) 操作。 - **操作历史**: 临时记录当前会话的操作历史。 ### 4. 用户管理 (User Management) - **用户列表**: 展示所有用户及其关联角色和激活状态。 - **创建用户**: 支持创建新用户并分配初始角色。 - **解锁用户**: 支持重置被锁定的用户状态 (`USER_UNLOCK`)。 ### 5. 角色与权限管理 (Role Management) - **角色列表**: 展示系统中的角色及其详细的权限规则。 - **创建角色**: 支持定义新的业务角色。 - **权限配置**: 支持为角色添加细粒度的权限规则(基于 Key 模式匹配 + 读/写/管理动作)。 ## 快速开始 ### 启动服务 1. 确保 Raft 节点已启动并在默认端口 `9011` 监听。 2. 运行 Web Admin: ```bash go run example/web_admin/main.go ``` 服务默认启动在 `http://localhost:8088`。 ### 配置 在 `main.go` 中可以修改默认配置: ```go const ( TargetTCPAddr = "127.0.0.1:9011" // Raft 节点地址 WebPort = ":8088" // Web Admin 监听端口 ) ``` ## 6. 联合调试开发 (Role 示例) 本节介绍了如何利用 `example/role` 目录下的多节点示例环境与 Web Admin 进行联合调试。该环境预置了带有 RBAC (基于角色的访问控制) 功能的 Raft 节点。 ### 6.1 环境准备 `example/role` 包含两个节点配置 (`node1` 和 `node2`) 以及用于初始化测试数据的 CLI 命令。 **步骤 1:启动 Raft 节点 1** 打开一个新的终端,启动 `node1`: ```bash # 终端 1 cd example/role/node1 go run main.go demo_cli.go ``` * 监听地址: `127.0.0.1:9001` * 包含功能: 自带 `demo-init` 命令用于初始化测试账户。 **步骤 2:启动 Raft 节点 2 (可选)** 打开另一个终端,启动 `node2` 以模拟集群环境: ```bash # 终端 2 cd example/role/node2 go run main.go demo_cli.go ``` * 监听地址: `127.0.0.1:9002` **步骤 3:初始化测试数据** 在 `node1` 的终端中,输入以下命令初始化角色和用户: ```bash # 在 node1 运行的终端中输入 demo-init ``` 此命令将创建以下测试账户: * **alice** (密码 `pass123`): 角色 `sales_manager` (允许设置 `product.discount` 为 0.5-0.9) * **bob** (密码 `pass123`): 角色 `junior_sales` (允许设置 `product.discount` 为 0.8-0.95) ### 6.2 配置 Web Admin 修改 `example/web_admin/main.go` 以连接到 `node1` 的端口 (`9001`)。 ```go // example/web_admin/main.go const ( TargetTCPAddr = "127.0.0.1:9001" // 修改为 node1 的端口 WebPort = ":8088" ) ``` ### 6.3 运行与验证 1. 启动 Web Admin: ```bash go run example/web_admin/main.go ``` 2. 访问 `http://localhost:8088`。 3. **测试登录**: * 使用 `alice` / `pass123` 登录。 4. **测试权限控制**: * 进入 **KV Explorer**。 * 尝试 `SET product.discount 0.6` -> **应成功** (在 0.5-0.9 范围内)。 * 尝试 `SET product.discount 0.1` -> **应失败** (超出范围)。 * 尝试 `SET system.config 1` -> **应失败** (无权限)。 5. **测试多角色视图**: * 注销并使用 `bob` / `pass123` 登录。 * 尝试 `SET product.discount 0.6` -> **应失败** (bob 只能设置 0.8-0.95)。 通过此流程,可以完整验证 Web Admin 的前端逻辑与后端 Raft 节点的权限系统是否协同工作正常。