用户系统
DNS-Go 提供完善的用户管理系统,支持多用户、角色权限和账号安全功能。
功能概述
用户系统提供以下功能:
- 用户管理:创建、编辑、删除用户账号
- 角色权限:基于角色的权限控制
- 密码安全:密码加密、强度要求
- 登录安全:失败锁定、验证码
- 个人资料:用户信息管理
默认账号
系统首次启动时会自动创建默认管理员账号:
| 账号 | 密码 | 角色 |
|---|---|---|
| admin | admin123 | 超级管理员 |
⚠️ 安全提醒:首次登录后请立即修改默认密码!
角色说明
DNS-Go 内置以下角色:
| 角色 | 权限范围 | 适用对象 |
|---|---|---|
| 超级管理员 | 所有权限 | 系统管理员 |
| 管理员 | 除用户管理外的所有权限 | 运维管理员 |
| 操作员 | 域名和记录管理 | 日常操作人员 |
| 访客 | 只读权限 | 审计、查看人员 |
角色权限详情
超级管理员
- 用户管理(创建、编辑、删除、重置密码)
- 域名管理(增删改查)
- 解析记录管理
- 上游管理
- 系统配置
- 日志查看
- 监控查看
管理员
- 域名管理(增删改查)
- 解析记录管理
- 上游管理
- 系统配置
- 日志查看
- 监控查看
- ❌ 用户管理(只能查看,不能修改)
操作员
- 域名管理(增删改查)
- 解析记录管理
- 上游查看
- 日志查看
- ❌ 用户管理
- ❌ 系统配置
访客
- 域名查看
- 解析记录查看
- 日志查看
- 监控查看
- ❌ 所有修改操作
用户管理操作
创建用户
超级管理员可以创建新用户:
- 登录 Web 管理界面
- 进入「系统管理」→「用户管理」
- 点击「新增用户」按钮
- 填写用户信息:
| 字段 | 说明 | 必填 |
|---|---|---|
| 用户名 | 登录账号,唯一标识 | ✅ |
| 密码 | 初始密码 | ✅ |
| 昵称 | 显示名称 | ❌ |
| 邮箱 | 联系邮箱 | ❌ |
| 手机号 | 联系手机 | ❌ |
| 角色 | 用户角色 | ✅ |
| 状态 | 启用/禁用 | ✅ |
- 点击「确定」保存
编辑用户
- 在用户列表中找到要编辑的用户
- 点击「编辑」按钮
- 修改用户信息
- 点击「保存」
删除用户
⚠️ 警告:删除用户操作不可恢复!
- 在用户列表中找到要删除的用户
- 点击「删除」按钮
- 确认删除操作
注意:
- 不能删除当前登录的用户
- 建议禁用而非删除,保留操作记录
重置密码
超级管理员可以为其他用户重置密码:
- 在用户列表中找到目标用户
- 点击「重置密码」按钮
- 输入新密码
- 确认重置
重置后用户需要使用新密码登录,建议用户登录后立即修改密码。
解锁用户
当用户因多次登录失败被锁定时,管理员可以解锁:
- 在用户列表中找到被锁定的用户(显示锁定状态)
- 点击「解锁」按钮
- 确认解锁操作
个人资料管理
修改个人信息
用户可以修改自己的个人资料:
- 点击右上角用户名
- 选择「个人资料」
- 修改信息:
- 昵称
- 邮箱
- 手机号
- 头像
- 点击「保存」
修改密码
- 进入「个人资料」页面
- 点击「修改密码」
- 输入:
- 原密码
- 新密码
- 确认新密码
- 点击「确认修改」
密码要求:
- 最少 6 位字符
- 建议包含大小写字母、数字
- 避免使用简单密码(如 123456、password)
首次登录修改密码
系统支持强制首次登录修改密码:
- 新创建的用户首次登录时提示修改密码
- 管理员重置密码后首次登录时提示修改
- 在「个人资料」页面可以关闭提示
登录安全
登录失败锁定
为防止暴力破解,系统实现了登录失败锁定机制:
| 连续失败次数 | 锁定时间 |
|---|---|
| 5 次 | 15 分钟 |
| 10 次 | 1 小时 |
| 20 次 | 24 小时 |
解锁方式:
- 等待锁定时间自动解锁
- 管理员手动解锁
验证码
登录时支持验证码验证(可配置):
- 图形验证码:输入图片中的字符
- 启用场景:多次登录失败后自动启用
密码强度
系统对密码强度进行校验:
| 等级 | 要求 | 说明 |
|---|---|---|
| 弱 | 少于 6 位 | ❌ 不允许使用 |
| 中 | 6-8 位,含数字或字母 | ⚠️ 不推荐 |
| 强 | 8 位以上,含数字、字母、符号 | ✅ 推荐使用 |
API 接口
用户登录
bash
POST /api/auth/login
Content-Type: application/json
{
"username": "admin",
"password": "admin123",
"captcha": "1234" // 可选,根据配置
}响应示例:
json
{
"code": 200,
"message": "登录成功",
"data": {
"token": "eyJhbGciOiJIUzI1NiIs...",
"user": {
"id": 1,
"username": "admin",
"nickname": "管理员",
"role": "super_admin",
"email": "admin@example.com"
}
}
}获取用户信息
bash
GET /api/user/info
Authorization: Bearer YOUR_TOKEN获取用户列表
bash
GET /api/users?page=1&pageSize=20
Authorization: Bearer YOUR_TOKEN响应示例:
json
{
"code": 200,
"data": {
"list": [
{
"id": 1,
"username": "admin",
"nickname": "管理员",
"role": "super_admin",
"email": "admin@example.com",
"phone": "",
"status": "enabled",
"last_login": "2025-01-15T10:30:00Z",
"created_at": "2025-01-01T00:00:00Z"
}
],
"total": 5
}
}创建用户
bash
POST /api/user/add
Authorization: Bearer YOUR_TOKEN
Content-Type: application/json
{
"username": "operator1",
"password": "password123",
"nickname": "操作员",
"role": "operator",
"email": "operator@example.com",
"status": "enabled"
}更新用户
bash
PUT /api/user/:id
Authorization: Bearer YOUR_TOKEN
Content-Type: application/json
{
"nickname": "新昵称",
"email": "newemail@example.com",
"role": "admin",
"status": "enabled"
}删除用户
bash
DELETE /api/user/:id
Authorization: Bearer YOUR_TOKEN修改密码
bash
PUT /api/user/password
Authorization: Bearer YOUR_TOKEN
Content-Type: application/json
{
"old_password": "oldpass123",
"new_password": "newpass123"
}重置密码(管理员)
bash
PUT /api/user/:id/reset-password
Authorization: Bearer YOUR_TOKEN
Content-Type: application/json
{
"new_password": "resetpass123"
}解锁用户
bash
PUT /api/user/:id/unlock
Authorization: Bearer YOUR_TOKEN最佳实践
账号管理建议
最小权限原则
- 为用户分配最小必要权限
- 避免过多超级管理员账号
定期审计
- 定期检查用户列表
- 删除或禁用不再使用的账号
- 检查权限分配是否合理
密码管理
- 定期更换密码(建议 90 天)
- 不同系统使用不同密码
- 避免使用个人信息作为密码
操作日志
- 启用操作日志记录
- 定期审计敏感操作
- 关注异常登录行为
角色分配建议
| 场景 | 推荐角色 | 说明 |
|---|---|---|
| 系统部署运维 | 超级管理员 | 需要完整系统权限 |
| 日常 DNS 管理 | 管理员 | 不需要用户管理权限 |
| 添加解析记录 | 操作员 | 仅域名管理权限 |
| 查看统计数据 | 访客 | 只读权限 |
常见问题
Q: 忘记密码怎么办?
如果是超级管理员忘记密码:
- 停止 DNS-Go 服务
- 在数据库中重置密码(使用 bcrypt 加密)
- 或使用命令行工具重置
如果是普通用户:
- 联系超级管理员重置密码
Q: 可以禁用登录失败锁定吗?
可以,在配置文件或系统设置中调整:
toml
# 登录安全配置
[jwt]
# ... 其他配置
# 登录失败锁定(通过系统设置配置)
# max_login_attempts = 5 # 最大尝试次数,设为 0 禁用
# lock_duration = 30 # 锁定时间(分钟)Q: 如何查看登录日志?
在「系统管理」→「登录日志」页面查看:
- 登录时间
- 登录 IP
- 登录结果(成功/失败)
- 失败原因
Q: 支持 LDAP/AD 集成吗?
当前版本暂不支持,计划在后续版本添加 LDAP/Active Directory 集成。