Files
v-hono/docs/README_AUTH_SYSTEM.md

6.4 KiB
Raw Permalink Blame History

用户角色菜单管理系统

基于 v-hono 框架的用户认证和权限管理系统,提供完整的用户角色管理和动态菜单功能。

功能特性

🔐 用户认证

  • 用户注册和登录
  • JWT 令牌认证
  • 密码加密存储
  • 会话管理

👥 角色管理

  • 多级角色系统(admin、manager、user、guest)
  • 基于角色的权限控制
  • 灵活的权限分配

📋 菜单管理

  • 动态菜单系统
  • 树形菜单结构
  • 基于权限的菜单显示
  • 菜单排序和图标支持

🛡️ 安全特性

  • 密码 SHA256 加密
  • 令牌过期机制
  • 中间件权限验证
  • 防止路径遍历攻击

系统架构

v-hono/
├── hono/
│   ├── auth.v              # 认证核心模块
│   ├── auth_routes.v       # 认证路由
│   ├── database.v          # 数据库管理
│   ├── request.v           # 请求处理
│   └── app.v              # 应用框架
├── auth_example.v          # 完整示例
└── README_AUTH_SYSTEM.md   # 本文档

快速开始

1. 编译和运行

# 编译示例应用
v auth_example.v

# 运行应用
./auth_example

2. 访问系统

打开浏览器访问:http://localhost:3000

3. 默认用户

系统预创建了以下示例用户:

用户名 密码 角色 权限
admin admin123 admin 所有权限
manager manager123 manager 读写管理权限
user user123 user 读写权限
guest guest123 guest 只读权限

API 接口

认证接口

用户注册

POST /api/auth/register
Content-Type: application/json

{
  "username": "newuser",
  "email": "user@example.com",
  "password": "password123",
  "role": "user"
}

用户登录

POST /api/auth/login
Content-Type: application/json

{
  "username": "admin",
  "password": "admin123"
}

响应:

{
  "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
  "expires_at": 1640995200
}

获取用户信息

GET /api/auth/profile
Authorization: <token>

用户注销

POST /api/auth/logout
Authorization: <token>

菜单接口

获取用户菜单

GET /api/auth/menus
Authorization: <token>

获取所有菜单(管理员)

GET /api/auth/menus/all
Authorization: <token>

创建菜单项(管理员)

POST /api/auth/menus
Authorization: <token>
Content-Type: application/json

{
  "name": "新菜单",
  "path": "/new-menu",
  "icon": "📄",
  "parent_id": 0,
  "sort_order": 1,
  "permissions": ["read", "write"]
}

受保护的路由

用户路由

GET /api/protected/user
Authorization: <token>

管理员路由

GET /api/protected/admin
Authorization: <token>

角色权限说明

Admin(超级管理员)

  • 拥有所有权限
  • 可以管理所有用户和菜单
  • 可以访问所有系统功能

Manager(管理员)

  • 拥有读写和管理权限
  • 可以管理用户和菜单
  • 可以访问大部分系统功能

User(普通用户)

  • 拥有读写权限
  • 可以查看和编辑内容
  • 无法管理系统设置

Guest(访客)

  • 只有只读权限
  • 只能查看公开内容
  • 无法进行任何修改操作

菜单权限配置

菜单项通过 permissions 字段控制访问权限:

{
  "name": "用户管理",
  "path": "/users",
  "icon": "👥",
  "permissions": ["read", "write", "manage"]
}

权限说明:

  • read: 只读权限
  • write: 读写权限
  • manage: 管理权限
  • *: 所有权限(仅管理员)

中间件使用

认证中间件

// 添加认证中间件
app.use(hono.auth_middleware(auth_manager))

权限中间件

// 添加权限检查中间件
app.use(hono.permission_middleware('manage'))

数据库结构

users 表

CREATE TABLE users (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    username TEXT UNIQUE NOT NULL,
    email TEXT UNIQUE NOT NULL,
    password_hash TEXT NOT NULL,
    role TEXT NOT NULL,
    status BOOLEAN DEFAULT 1,
    created_at INTEGER NOT NULL,
    updated_at INTEGER NOT NULL
);

menu_items 表

CREATE TABLE menu_items (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    path TEXT NOT NULL,
    icon TEXT,
    parent_id INTEGER DEFAULT 0,
    sort_order INTEGER DEFAULT 0,
    permissions TEXT,
    status BOOLEAN DEFAULT 1,
    created_at INTEGER NOT NULL,
    updated_at INTEGER NOT NULL
);

user_sessions 表

CREATE TABLE user_sessions (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    user_id INTEGER NOT NULL,
    token TEXT UNIQUE NOT NULL,
    expires_at INTEGER NOT NULL,
    created_at INTEGER NOT NULL,
    FOREIGN KEY (user_id) REFERENCES users (id)
);

开发指南

添加新的认证功能

  1. 在 auth.v 中添加新的方法
  2. 在 auth_routes.v 中添加对应的路由
  3. 更新前端界面

自定义权限

  1. 修改 UserRole 枚举
  2. 更新 check_permission 方法
  3. 调整菜单权限配置

扩展菜单功能

  1. 添加菜单编辑和删除接口
  2. 实现菜单拖拽排序
  3. 添加菜单缓存机制

安全建议

  1. 密码安全

    • 使用强密码策略
    • 定期更换密码
    • 启用密码复杂度检查
  2. 令牌安全

    • 设置合理的过期时间
    • 实现令牌刷新机制
    • 支持令牌撤销
  3. 权限控制

    • 最小权限原则
    • 定期审查权限
    • 记录权限变更日志
  4. 数据安全

    • 数据库加密
    • 定期备份
    • 访问日志记录

故障排除

常见问题

  1. 数据库连接失败

    • 检查数据库文件权限
    • 确保 SQLite 支持
    • 验证数据库路径
  2. 认证失败

    • 检查用户名密码
    • 验证令牌格式
    • 确认令牌未过期
  3. 权限不足

    • 检查用户角色
    • 验证菜单权限配置
    • 确认中间件配置

调试模式

启用调试输出:

// 在代码中添加调试信息
println('Debug: $debug_info')

性能优化

  1. 数据库优化

    • 添加适当的索引
    • 使用连接池
    • 优化查询语句
  2. 缓存策略

    • 菜单缓存
    • 用户信息缓存
    • 权限缓存
  3. 并发处理

    • 使用连接池
    • 实现请求队列
    • 优化锁机制

贡献指南

  1. Fork 项目
  2. 创建功能分支
  3. 提交更改
  4. 创建 Pull Request

许可证

MIT License

联系方式

如有问题或建议,请提交 Issue 或联系开发团队。