Skip to content

用户系统

DNS-Go 提供完善的用户管理系统,支持多用户、角色权限和账号安全功能。

功能概述

用户系统提供以下功能:

  • 用户管理:创建、编辑、删除用户账号
  • 角色权限:基于角色的权限控制
  • 密码安全:密码加密、强度要求
  • 登录安全:失败锁定、验证码
  • 个人资料:用户信息管理

默认账号

系统首次启动时会自动创建默认管理员账号:

账号密码角色
adminadmin123超级管理员

⚠️ 安全提醒:首次登录后请立即修改默认密码!

角色说明

DNS-Go 内置以下角色:

角色权限范围适用对象
超级管理员所有权限系统管理员
管理员除用户管理外的所有权限运维管理员
操作员域名和记录管理日常操作人员
访客只读权限审计、查看人员

角色权限详情

超级管理员

  • 用户管理(创建、编辑、删除、重置密码)
  • 域名管理(增删改查)
  • 解析记录管理
  • 上游管理
  • 系统配置
  • 日志查看
  • 监控查看

管理员

  • 域名管理(增删改查)
  • 解析记录管理
  • 上游管理
  • 系统配置
  • 日志查看
  • 监控查看
  • ❌ 用户管理(只能查看,不能修改)

操作员

  • 域名管理(增删改查)
  • 解析记录管理
  • 上游查看
  • 日志查看
  • ❌ 用户管理
  • ❌ 系统配置

访客

  • 域名查看
  • 解析记录查看
  • 日志查看
  • 监控查看
  • ❌ 所有修改操作

用户管理操作

创建用户

超级管理员可以创建新用户:

  1. 登录 Web 管理界面
  2. 进入「系统管理」→「用户管理」
  3. 点击「新增用户」按钮
  4. 填写用户信息:
字段说明必填
用户名登录账号,唯一标识
密码初始密码
昵称显示名称
邮箱联系邮箱
手机号联系手机
角色用户角色
状态启用/禁用
  1. 点击「确定」保存

编辑用户

  1. 在用户列表中找到要编辑的用户
  2. 点击「编辑」按钮
  3. 修改用户信息
  4. 点击「保存」

删除用户

⚠️ 警告:删除用户操作不可恢复!

  1. 在用户列表中找到要删除的用户
  2. 点击「删除」按钮
  3. 确认删除操作

注意

  • 不能删除当前登录的用户
  • 建议禁用而非删除,保留操作记录

重置密码

超级管理员可以为其他用户重置密码:

  1. 在用户列表中找到目标用户
  2. 点击「重置密码」按钮
  3. 输入新密码
  4. 确认重置

重置后用户需要使用新密码登录,建议用户登录后立即修改密码。

解锁用户

当用户因多次登录失败被锁定时,管理员可以解锁:

  1. 在用户列表中找到被锁定的用户(显示锁定状态)
  2. 点击「解锁」按钮
  3. 确认解锁操作

个人资料管理

修改个人信息

用户可以修改自己的个人资料:

  1. 点击右上角用户名
  2. 选择「个人资料」
  3. 修改信息:
    • 昵称
    • 邮箱
    • 手机号
    • 头像
  4. 点击「保存」

修改密码

  1. 进入「个人资料」页面
  2. 点击「修改密码」
  3. 输入:
    • 原密码
    • 新密码
    • 确认新密码
  4. 点击「确认修改」

密码要求:

  • 最少 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

最佳实践

账号管理建议

  1. 最小权限原则

    • 为用户分配最小必要权限
    • 避免过多超级管理员账号
  2. 定期审计

    • 定期检查用户列表
    • 删除或禁用不再使用的账号
    • 检查权限分配是否合理
  3. 密码管理

    • 定期更换密码(建议 90 天)
    • 不同系统使用不同密码
    • 避免使用个人信息作为密码
  4. 操作日志

    • 启用操作日志记录
    • 定期审计敏感操作
    • 关注异常登录行为

角色分配建议

场景推荐角色说明
系统部署运维超级管理员需要完整系统权限
日常 DNS 管理管理员不需要用户管理权限
添加解析记录操作员仅域名管理权限
查看统计数据访客只读权限

常见问题

Q: 忘记密码怎么办?

如果是超级管理员忘记密码:

  1. 停止 DNS-Go 服务
  2. 在数据库中重置密码(使用 bcrypt 加密)
  3. 或使用命令行工具重置

如果是普通用户:

  • 联系超级管理员重置密码

Q: 可以禁用登录失败锁定吗?

可以,在配置文件或系统设置中调整:

toml
# 登录安全配置
[jwt]
# ... 其他配置

# 登录失败锁定(通过系统设置配置)
# max_login_attempts = 5      # 最大尝试次数,设为 0 禁用
# lock_duration = 30          # 锁定时间(分钟)

Q: 如何查看登录日志?

在「系统管理」→「登录日志」页面查看:

  • 登录时间
  • 登录 IP
  • 登录结果(成功/失败)
  • 失败原因

Q: 支持 LDAP/AD 集成吗?

当前版本暂不支持,计划在后续版本添加 LDAP/Active Directory 集成。

相关文档

基于 MIT 许可发布