feat: add user role menu management api

This commit is contained in:
yangshangbo
2025-07-16 18:09:52 +08:00
parent 441a8f114d
commit 38a55c41ab
5 changed files with 1569 additions and 0 deletions
+145
View File
@@ -0,0 +1,145 @@
module main
import hono
import net.http
import json
fn main() {
// 创建数据库管理器
db_manager := hono.new_database_manager('auth_system.db') or {
eprintln('Failed to create database manager: $err')
return
}
// 创建认证管理器
mut auth_manager := hono.new_auth_manager(db_manager)
// 初始化认证相关表
auth_manager.init_tables() or {
eprintln('Failed to initialize auth tables: $err')
return
}
// 创建 Hono 应用
mut app := hono.Hono{}
// 注册认证路由
hono.register_auth_routes(mut app, mut auth_manager)
// 添加一些示例菜单项
create_sample_menus(mut auth_manager)
// 添加一些示例用户
create_sample_users(mut auth_manager)
// 添加一些受保护的路由示例
app.get('/api/protected/user', fn [auth_manager] (mut c hono.Context) http.Response {
token := c.req.header.get_custom('Authorization') or { '' }
user := auth_manager.verify_token(token) or {
c.status(401)
return c.json(json.encode({
'error': 'User not found'
}))
}
return c.json(json.encode({
'message': 'This is a protected user route',
'user_id': user.id.str(),
'username': user.username,
'email': user.email,
'role': user.role.str()
}))
})
app.get('/api/protected/admin', fn [auth_manager] (mut c hono.Context) http.Response {
token := c.req.header.get_custom('Authorization') or { '' }
user := auth_manager.verify_token(token) or {
c.status(401)
return c.json(json.encode({
'error': 'User not found'
}))
}
if !auth_manager.check_permission(user, 'manage') {
c.status(403)
return c.json(json.encode({
'error': 'Admin access required'
}))
}
return c.json(json.encode({
'message': 'This is a protected admin route',
'user_id': user.id.str(),
'username': user.username,
'email': user.email,
'role': user.role.str()
}))
})
// 添加静态文件服务
app.get('/', fn (mut c hono.Context) http.Response {
return c.file('public/auth.html')
})
println('🚀 用户角色菜单管理系统已启动')
println('📱 访问地址: http://localhost:3000')
println('')
println('📋 示例用户:')
println(' 用户名: admin, 密码: admin123, 角色: admin')
println(' 用户名: manager, 密码: manager123, 角色: manager')
println(' 用户名: user, 密码: user123, 角色: user')
println(' 用户名: guest, 密码: guest123, 角色: guest')
println('')
// 启动服务器
app.listen(':3000')
}
// 创建示例菜单
fn create_sample_menus(mut auth_manager hono.AuthManager) {
// 创建根菜单
auth_manager.create_menu_item('仪表板', '/dashboard', '📊', 0, 1, ['read']) or { println('仪表板插入失败') }
auth_manager.create_menu_item('用户管理', '/users', '👥', 0, 2, ['read', 'write', 'manage']) or { println('用户管理插入失败') }
auth_manager.create_menu_item('系统设置', '/settings', '⚙️', 0, 3, ['manage']) or { println('系统设置插入失败') }
auth_manager.create_menu_item('文件管理', '/files', '📁', 0, 4, ['read', 'write']) or { println('文件管理插入失败') }
// 获取用户管理菜单ID(动态获取)
user_menu_id := auth_manager.get_menu_id_by_path('/users')
// 创建子菜单
auth_manager.create_menu_item('用户列表', '/users/list', '📋', user_menu_id, 1, ['read']) or { println('用户列表插入失败') }
auth_manager.create_menu_item('添加用户', '/users/add', '➕', user_menu_id, 2, ['write']) or { println('添加用户插入失败') }
auth_manager.create_menu_item('编辑用户', '/users/edit', '✏️', user_menu_id, 3, ['write']) or { println('编辑用户插入失败') }
auth_manager.create_menu_item('删除用户', '/users/delete', '🗑️', user_menu_id, 4, ['manage']) or { println('删除用户插入失败') }
// 更多测试菜单
auth_manager.create_menu_item('报表中心', '/reports', '📈', 0, 5, ['read', 'write']) or { println('报表中心插入失败') }
reports_menu_id := auth_manager.get_menu_id_by_path('/reports')
auth_manager.create_menu_item('销售报表', '/reports/sales', '💹', reports_menu_id, 1, ['read']) or { println('销售报表插入失败') }
auth_manager.create_menu_item('财务报表', '/reports/finance', '💰', reports_menu_id, 2, ['read']) or { println('财务报表插入失败') }
auth_manager.create_menu_item('消息中心', '/messages', '📨', 0, 6, ['read']) or { println('消息中心插入失败') }
auth_manager.create_menu_item('个人中心', '/profile', '👤', 0, 7, ['read', 'write']) or { println('个人中心插入失败') }
auth_manager.create_menu_item('测试菜单A', '/test/a', '🅰️', 0, 8, ['read']) or { println('测试菜单A插入失败') }
auth_manager.create_menu_item('测试菜单B', '/test/b', '🅱️', 0, 9, ['read']) or { println('测试菜单B插入失败') }
auth_manager.create_menu_item('测试菜单C', '/test/c', '🆑', 0, 10, ['read']) or { println('测试菜单C插入失败') }
test_a_id := auth_manager.get_menu_id_by_path('/test/a')
auth_manager.create_menu_item('A-子菜单1', '/test/a/1', '1️⃣', test_a_id, 1, ['read']) or { println('A-子菜单1插入失败') }
auth_manager.create_menu_item('A-子菜单2', '/test/a/2', '2️⃣', test_a_id, 2, ['read']) or { println('A-子菜单2插入失败') }
println('✅ 示例菜单已创建')
println('✅ 更多测试菜单已创建')
}
// 创建示例用户
fn create_sample_users(mut auth_manager hono.AuthManager) {
// 创建管理员用户
auth_manager.create_user('admin', 'admin@example.com', 'admin123', hono.UserRole.admin) or { return }
// 创建经理用户
auth_manager.create_user('manager', 'manager@example.com', 'manager123', hono.UserRole.manager) or { return }
// 创建普通用户
auth_manager.create_user('user', 'user@example.com', 'user123', hono.UserRole.user) or { return }
// 创建访客用户
auth_manager.create_user('guest', 'guest@example.com', 'guest123', hono.UserRole.guest) or { return }
println('✅ 示例用户已创建')
}