get.ts 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. import { createRoute, OpenAPIHono } from '@hono/zod-openapi'
  2. import { ErrorSchema } from '@/server/utils/errorHandler'
  3. import { authMiddleware } from '@/server/middleware/auth.middleware'
  4. import { AuthContext } from '@/server/types/context'
  5. import { PermissionService } from '@/server/modules/permissions/permission.service'
  6. import { AppDataSource } from '@/server/data-source'
  7. import { z } from '@hono/zod-openapi'
  8. const permissionsService = new PermissionService(AppDataSource)
  9. const PermissionsResponseSchema = z.object({
  10. permissions: z.array(z.string()).openapi({
  11. description: '用户权限编码列表',
  12. example: ['user:manage', 'client:view', 'admin:access']
  13. })
  14. })
  15. const routeDef = createRoute({
  16. method: 'get',
  17. path: '/permissions',
  18. middleware: [authMiddleware],
  19. responses: {
  20. 200: {
  21. description: '获取用户权限列表成功',
  22. content: {
  23. 'application/json': {
  24. schema: PermissionsResponseSchema
  25. }
  26. }
  27. },
  28. 401: {
  29. description: '未授权',
  30. content: {
  31. 'application/json': {
  32. schema: ErrorSchema
  33. }
  34. }
  35. },
  36. 500: {
  37. description: '服务器错误',
  38. content: {
  39. 'application/json': {
  40. schema: ErrorSchema
  41. }
  42. }
  43. }
  44. }
  45. })
  46. const app = new OpenAPIHono<AuthContext>().openapi(routeDef, async (c) => {
  47. try {
  48. const user = c.get('user')
  49. const permissions = await permissionsService.getUserPermissions(user.id)
  50. return c.json({
  51. permissions
  52. }, 200)
  53. } catch (error) {
  54. console.error('获取用户权限失败:', error)
  55. return c.json({ code: 500, message: '获取用户权限失败' }, 500)
  56. }
  57. })
  58. export default app