6.4 KiB
6.4 KiB
用户角色菜单管理系统
基于 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)
);
开发指南
添加新的认证功能
- 在
auth.v中添加新的方法 - 在
auth_routes.v中添加对应的路由 - 更新前端界面
自定义权限
- 修改
UserRole枚举 - 更新
check_permission方法 - 调整菜单权限配置
扩展菜单功能
- 添加菜单编辑和删除接口
- 实现菜单拖拽排序
- 添加菜单缓存机制
安全建议
-
密码安全
- 使用强密码策略
- 定期更换密码
- 启用密码复杂度检查
-
令牌安全
- 设置合理的过期时间
- 实现令牌刷新机制
- 支持令牌撤销
-
权限控制
- 最小权限原则
- 定期审查权限
- 记录权限变更日志
-
数据安全
- 数据库加密
- 定期备份
- 访问日志记录
故障排除
常见问题
-
数据库连接失败
- 检查数据库文件权限
- 确保 SQLite 支持
- 验证数据库路径
-
认证失败
- 检查用户名密码
- 验证令牌格式
- 确认令牌未过期
-
权限不足
- 检查用户角色
- 验证菜单权限配置
- 确认中间件配置
调试模式
启用调试输出:
// 在代码中添加调试信息
println('Debug: $debug_info')
性能优化
-
数据库优化
- 添加适当的索引
- 使用连接池
- 优化查询语句
-
缓存策略
- 菜单缓存
- 用户信息缓存
- 权限缓存
-
并发处理
- 使用连接池
- 实现请求队列
- 优化锁机制
贡献指南
- Fork 项目
- 创建功能分支
- 提交更改
- 创建 Pull Request
许可证
MIT License
联系方式
如有问题或建议,请提交 Issue 或联系开发团队。