Эх сурвалжийг харах

更新推广链接控制器,新增团队成员服务以支持根据用户ID获取团队ID,调整用户角色权限验证逻辑,允许用户角色访问推广链接列表。

wuyi 3 сар өмнө
parent
commit
d7f7f054e8

+ 5 - 1
src/controllers/promotion-link.controller.ts

@@ -9,14 +9,17 @@ import {
 import { LinkType } from '../entities/promotion-link.entity'
 import { UserRole } from '../entities/user.entity'
 import { TeamService } from '../services/team.service'
+import { TeamMembersService } from '../services/team-members.service'
 
 export class PromotionLinkController {
   private promotionLinkService: PromotionLinkService
   private teamService: TeamService
+  private teamMembersService: TeamMembersService
 
   constructor(app: FastifyInstance) {
     this.promotionLinkService = new PromotionLinkService(app)
     this.teamService = new TeamService(app)
+    this.teamMembersService = new TeamMembersService(app)
   }
 
   async create(request: FastifyRequest<{ Body: CreatePromotionLinkBody }>, reply: FastifyReply) {
@@ -45,7 +48,8 @@ export class PromotionLinkController {
         return reply.code(403).send({ message: '用户未登录' })
       }
       if (user.role === UserRole.USER) {
-        return reply.code(403).send({ message: '用户无权限' })
+        const teamMembers = await this.teamMembersService.findByUserId(user.id)
+        request.query.teamId = teamMembers.teamId
       } else if (user.role === UserRole.TEAM) {
         const team = await this.teamService.findByUserId(user.id)
         request.query.teamId = team.id

+ 1 - 1
src/routes/promotion-link.routes.ts

@@ -23,7 +23,7 @@ export default async function promotionLinkRoutes(fastify: FastifyInstance) {
   // 获取推广链接列表
   fastify.get<{ Querystring: ListPromotionLinkQuery }>(
     '/',
-    { onRequest: [authenticate, hasAnyRole(UserRole.ADMIN, UserRole.TEAM)] },
+    { onRequest: [authenticate, hasAnyRole(UserRole.ADMIN, UserRole.TEAM, UserRole.USER)] },
     promotionLinkController.findAll.bind(promotionLinkController)
   )
 

+ 4 - 0
src/services/team-members.service.ts

@@ -133,4 +133,8 @@ export class TeamMembersService {
 
     return statistics
   }
+
+  async findByUserId(userId: number): Promise<TeamMembers> {
+    return this.teamMembersRepository.findOneOrFail({ where: { userId } })
+  }
 }