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