This commit is contained in:
2024-06-24 16:12:23 -06:00
parent b789bc4065
commit 0d83995ffe
6 changed files with 62 additions and 5 deletions
+8 -1
View File
@@ -1,12 +1,17 @@
import { Body, Controller, Delete, Get, Param, ParseIntPipe, Post, Put, Query } from '@nestjs/common';
import { Body, Controller, Delete, Get, Param, ParseIntPipe, Post, Put, Query,UseGuards } from '@nestjs/common';
import { ProfesorService } from './profesor.service';
import { profesorDto } from './dto/profesorDto.dto';
import {Roles} from '../permissions/roles.decorator'
import {RolesGuard} from '../permissions/roles.guard'
import {Role} from '../permissions/role.enum'
@Controller('profesor')
@UseGuards(RolesGuard)
export class ProfesorController {
constructor(private profesorService: ProfesorService) {}
@Post()
@Roles(Role.Responsable,Role.Admin)
async register(@Body() data: profesorDto) {
return this.profesorService.register(data);
}
@@ -25,11 +30,13 @@ export class ProfesorController {
}
@Put(':id_profesor')
@Roles(Role.Responsable,Role.Admin)
async postModify(@Param('id_profesor', ParseIntPipe) id_profesor: number, @Body() data: profesorDto) {
return this.profesorService.modify(id_profesor, data);
}
@Delete(':id_profesor')
@Roles(Role.Responsable,Role.Admin)
async remove(@Param('id_profesor', ParseIntPipe) id_profesor: number) {
return this.profesorService.remove(id_profesor);
}
+12 -4
View File
@@ -14,9 +14,13 @@ import {
import { AuthGuard } from './auth.guard';
import { AuthService } from './auth.service';
import { registerDto } from './dto/registerDto.dto';
import { UserDto } from 'src/users/dto/userDto.dto';
import {Roles} from '../permissions/roles.decorator'
import {RolesGuard} from '../permissions/roles.guard'
import {Role} from '../permissions/role.enum'
@Controller('auth')
@UseGuards(RolesGuard)
export class AuthController {
constructor(private authService: AuthService) {}
@@ -25,8 +29,10 @@ export class AuthController {
async signIn(@Body() data: registerDto) {
return this.authService.signIn(data);
}
//@UseGuards()
@UseGuards()
@Post("register")
@Roles(Role.Admin)
async register(@Body() data: registerDto){
return this.authService.register(data)
}
@@ -37,14 +43,16 @@ export class AuthController {
return req.user;
}
//@UseGuards(AuthGuard)
@UseGuards(AuthGuard)
@Put('Modificacion/:id')
@Roles(Role.Admin)
async update(@Param('id') userId: number, @Body() data: registerDto) {
return this.authService.update(userId, data);
}
//@UseGuards(AuthGuard)
@UseGuards(AuthGuard)
@Delete('Borrado/:id')
@Roles(Role.Admin)
async remove(@Param('id') id: number) {
await this.authService.remove(id);
return { message: 'User successfully deleted' };
+2
View File
@@ -49,9 +49,11 @@ export class AuthService {
if (!checkPassword) {
throw new UnauthorizedException('Invalid password');
}
const payload = {
idUser: user.id_usuario,
username: user.usuario,
permissions: user.id_tipo_usuario,
};
const token = this.jwtService.sign(payload);
+5
View File
@@ -0,0 +1,5 @@
export enum Role {
Admin = '1',
Responsable = '2',
}
+5
View File
@@ -0,0 +1,5 @@
import { SetMetadata } from '@nestjs/common';
import { Role } from './role.enum';
export const ROLES_KEY = 'roles';
export const Roles = (...roles: Role[]) => SetMetadata(ROLES_KEY, roles);
+30
View File
@@ -0,0 +1,30 @@
// roles.guard.ts
import { Injectable, CanActivate, ExecutionContext } from '@nestjs/common';
import { Reflector } from '@nestjs/core';
import { Role } from './role.enum';
import { ROLES_KEY } from './roles.decorator'; // Asegúrate de importar el decorador correcto
@Injectable()
export class RolesGuard implements CanActivate {
constructor(private reflector: Reflector) {}
canActivate(context: ExecutionContext): boolean {
const requiredRoles = this.reflector.getAllAndOverride<Role[]>(ROLES_KEY, [
context.getHandler(),
context.getClass(),
]);
if (!requiredRoles) {
return true;
}
const { user } = context.switchToHttp().getRequest();
if (!user || !user.roles || user.roles.length === 0) {
return false;
}
return requiredRoles.some(role => user.roles.includes(role));
}
}