init to partner module

This commit is contained in:
2026-04-13 15:47:59 +03:30
parent 388aa25de4
commit 59da9585c4
21 changed files with 553 additions and 12 deletions
+49
View File
@@ -0,0 +1,49 @@
// src/common/guards/permissions.guard.ts
import { ITokenPayload } from '@/modules/auth/auth.utils'
import { PrismaService } from '@/prisma/prisma.service'
import {
ExecutionContext,
ForbiddenException,
Injectable,
UnauthorizedException,
} from '@nestjs/common'
import { Request as ExpressRequest } from 'express'
@Injectable()
export class PartnerGuard {
constructor(private prisma: PrismaService) {}
async canActivate(
tokenPayload: ITokenPayload,
context: ExecutionContext,
): Promise<boolean> {
if (!tokenPayload || tokenPayload.type !== 'PARTNER') {
throw new UnauthorizedException()
}
const partner = await this.prisma.partner.findFirst({
where: {
partner_accounts: {
some: {
id: tokenPayload.account_id,
},
},
},
select: {
partner_accounts: {
select: {
role: true,
},
},
},
})
if (!partner) {
throw new ForbiddenException('شما دسترسی لازم را ندارید.')
}
const req = context.switchToHttp().getRequest<ExpressRequest>()
return true
}
}
+13 -9
View File
@@ -2,7 +2,6 @@ import { ITokenPayload } from '@/modules/auth/auth.utils'
import {
CanActivate,
ExecutionContext,
ForbiddenException,
Injectable,
UnauthorizedException,
} from '@nestjs/common'
@@ -12,6 +11,7 @@ import { Request as ExpressRequest } from 'express'
import { IS_PUBLIC_KEY } from '../decorators/public.decorator'
import { IS_PUBLIC_WITH_TOKEN_KEY } from '../decorators/withToken.decorator'
import { ConsumerGuard } from './auth-consumer.guard'
import { PartnerGuard } from './auth-partner.guard'
import { PosGuard } from './auth-pos.guard'
@Injectable()
@@ -21,6 +21,7 @@ export class JwtAuthGuard implements CanActivate {
private reflector: Reflector,
private consumerGuard: ConsumerGuard,
private posGuard: PosGuard,
private partnerGuard: PartnerGuard,
) {}
async canActivate(context: ExecutionContext): Promise<boolean> {
@@ -59,14 +60,17 @@ export class JwtAuthGuard implements CanActivate {
const tokenPayload = this.jwt.decode(token) as ITokenPayload
if (req.url.startsWith('/api/v1/consumer')) {
await this.consumerGuard.canActivate(tokenPayload, context)
} else if (req.url.startsWith('/api/v1/pos')) {
// await this.consumerGuard.canActivate(tokenPayload, context)
await this.posGuard.canActivate(tokenPayload, context)
} else if (tokenPayload.type != 'ADMIN') {
throw new ForbiddenException('شما دسترسی لازم را ندارید')
}
// if (req.url.startsWith('/api/v1/partner')) {
// await this.partnerGuard.canActivate(tokenPayload, context)
// }
// if (req.url.startsWith('/api/v1/consumer')) {
// await this.consumerGuard.canActivate(tokenPayload, context)
// } else if (req.url.startsWith('/api/v1/pos')) {
// // await this.consumerGuard.canActivate(tokenPayload, context)
// await this.posGuard.canActivate(tokenPayload, context)
// } else if (tokenPayload.type != 'ADMIN') {
// throw new ForbiddenException('شما دسترسی لازم را ندارید')
// }
return true
} catch (err) {
if (err) throw err