forked from Ynov/ptitspas-ynov-back
common added for decorators dto and guards
This commit is contained in:
parent
a87824a0c2
commit
47ccbb61f7
3
src/common/decorators/roles.decorator.ts
Normal file
3
src/common/decorators/roles.decorator.ts
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
import { SetMetadata } from "@nestjs/common";
|
||||||
|
|
||||||
|
export const Roles = (...roles: string[]) => SetMetadata("roles", roles);
|
||||||
7
src/common/decorators/user.decorator.ts
Normal file
7
src/common/decorators/user.decorator.ts
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
import { createParamDecorator, ExecutionContext } from "@nestjs/common";
|
||||||
|
|
||||||
|
export const User = createParamDecorator((data: string | undefined, ctx: ExecutionContext) => {
|
||||||
|
const request = ctx.switchToHttp().getRequest();
|
||||||
|
const user = request.user;
|
||||||
|
return data ? user?.[data] : user;
|
||||||
|
});
|
||||||
11
src/common/dto/date_range_query.dto.ts
Normal file
11
src/common/dto/date_range_query.dto.ts
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
import { IsDateString, IsOptional } from "class-validator";
|
||||||
|
|
||||||
|
export class DateRangeQueryDto {
|
||||||
|
@IsOptional()
|
||||||
|
@IsDateString()
|
||||||
|
start?: string;
|
||||||
|
|
||||||
|
@IsOptional()
|
||||||
|
@IsDateString()
|
||||||
|
end?: string;
|
||||||
|
}
|
||||||
6
src/common/dto/id_param.dto.ts
Normal file
6
src/common/dto/id_param.dto.ts
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
import { IsUUID } from "class-validator";
|
||||||
|
|
||||||
|
export class IdParamDto {
|
||||||
|
@IsUUID()
|
||||||
|
id: string;
|
||||||
|
}
|
||||||
11
src/common/dto/pagination.query.ts
Normal file
11
src/common/dto/pagination.query.ts
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
import { IsOptional, IsPositive } from "class-validator";
|
||||||
|
|
||||||
|
export class PaginationQueryDto {
|
||||||
|
@IsOptional()
|
||||||
|
@IsPositive()
|
||||||
|
offset?: number;
|
||||||
|
|
||||||
|
@IsOptional()
|
||||||
|
@IsPositive()
|
||||||
|
limit?: number;
|
||||||
|
}
|
||||||
8
src/common/dto/search_query.dto.ts
Normal file
8
src/common/dto/search_query.dto.ts
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
import { IsOptional, IsString, MinLength } from "class-validator";
|
||||||
|
|
||||||
|
export class SearchQueryDto {
|
||||||
|
@IsOptional()
|
||||||
|
@IsString()
|
||||||
|
@MinLength(2)
|
||||||
|
q?: string;
|
||||||
|
}
|
||||||
21
src/common/guards/roles.guard.ts
Normal file
21
src/common/guards/roles.guard.ts
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
import { CanActivate, ExecutionContext, Injectable } from "@nestjs/common";
|
||||||
|
import { Reflector } from "@nestjs/core";
|
||||||
|
import { Observable } from "rxjs";
|
||||||
|
|
||||||
|
@Injectable()
|
||||||
|
export class RolesGuard implements CanActivate {
|
||||||
|
constructor(private readonly reflector: Reflector) {}
|
||||||
|
canActivate(context: ExecutionContext): boolean | Promise<boolean> | Observable<boolean> {
|
||||||
|
const requiredRoles = this.reflector.get<string[]>('roles', context.getHandler());
|
||||||
|
if (!requiredRoles || requiredRoles.length === 0) {
|
||||||
|
return true; // Si aucun role est requis -> accès autorise
|
||||||
|
}
|
||||||
|
|
||||||
|
const request = context.switchToHttp().getRequest();
|
||||||
|
const user = request.user;
|
||||||
|
if (!user || !user.role) {
|
||||||
|
return false; // Si l'utilisateur est pas authentifie ou a pas de role -> accès refusé
|
||||||
|
}
|
||||||
|
return requiredRoles.includes(user.role);
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user