Implementación módulo permisos para roles

This commit is contained in:
2026-07-09 16:57:18 +00:00
parent 3ab69a831a
commit 8248389269
7 changed files with 348 additions and 2 deletions

View File

@ -16,7 +16,8 @@ import lpgRouter from "./modules/lpg/lpg.routes";
import anomalyRouter from "./modules/anomalies/anomaly.routes"; import anomalyRouter from "./modules/anomalies/anomaly.routes";
import pumpReadingRouter from "./modules/pump-reading/pumpReading.routes"; import pumpReadingRouter from "./modules/pump-reading/pumpReading.routes";
import dashboardRouter from "./modules/dashboard/dashboard.routes"; import dashboardRouter from "./modules/dashboard/dashboard.routes";
import permissionRouter from "./modules/permissions/permission.routes";
import rolePermissionRoute from "./modules/role-permissions/rolePermission.router";
@ -40,6 +41,10 @@ app.use("/api/lpg",lpgRouter);
app.use("/api/anomaly", anomalyRouter); app.use("/api/anomaly", anomalyRouter);
app.use("/api/pumpReading", pumpReadingRouter); app.use("/api/pumpReading", pumpReadingRouter);
app.use("/api/dashboard", dashboardRouter); app.use("/api/dashboard", dashboardRouter);
app.use("/api/permission", permissionRouter);
app.use("/api/rolePermission", rolePermissionRoute);
app.use("/api/permission", permissionRouter);
app.use("/api/rolePermission", rolePermissionRoute);
app.use(express.urlencoded({ app.use(express.urlencoded({
extended:true extended:true

View File

@ -18,4 +18,6 @@ permissionRouter.post("/", authMiddleware, controller.create);
permissionRouter.put("/:id", authMiddleware, controller.update); permissionRouter.put("/:id", authMiddleware, controller.update);
permissionRouter.delete("/:id", authMiddleware, controller.delete); permissionRouter.delete("/:id", authMiddleware, controller.delete);
export default permissionRouter;

View File

@ -0,0 +1,141 @@
import { Request, Response } from "express";
import { RolePermissionService } from "./rolePermission.service";
const service = new RolePermissionService();
export class RolePermissionController{
async getAll(
req:Request,
res:Response
){
try{
const rolePermissions = await service.getAll();
res.json(rolePermissions);
} catch (error){
res.status(500).json({
message:"Error al obtener configuación de permisos",
error
});
}
}
async getById(
req:Request,
res:Response
){
try{
const rolePermission = await service.getById(
req.params.id as string
);
if(!rolePermission){
return res.status(404).json({
message:"Configuración de permisos no encontrada"
});
}
res.json(rolePermission);
} catch(error){
res.status(500).json({
message:"Error al obtener configuración de permiso"
});
}
}
async getByRole(
req:Request,
res:Response
){
try{
const rolePermission = await service.getByRole(
req.params.roleId as string
);
if(!rolePermission){
return res.status(404).json({
message:"El rol no tiene permisos asignados"
});
}
res.json(rolePermission);
} catch(error){
res.status(500).json({
message:"Error al obtener permisos del rol"
});
}
}
async create(
req:Request,
res:Response
){
try{
const rolePemission = await service.create(
req.body
);
res.status(201).json(rolePemission);
}catch(error){
res.status(500).json({
message:"Error al crear configuración de permiso"
});
}
}
async update(
req:Request,
res:Response
){
try{
const rolePermission = await service.update(
req.params.id as string,
req.body
)
if (!rolePermission) {
return res.status(404).json({
message:
"Configuración de permiso no encontrada"
});
}
} catch(error){
res.status(500).json({
message:"Error al actualizar configuración de permiso"
});
}
}
async delete(
req:Request,
res:Response
){
try{
const rolePermission = await service.delete(
req.params.id as string
);
if(!rolePermission){
return res.status(404).json({
message:
"Configuración de permiso no encontrada"
});
}
res.json({
message:"Configuración de permiso eliminada correctamente"
});
}catch(error){
res.status(500).json({
message:"Error al eliminar configuración de vehículo"
})
}
}
}

View File

@ -0,0 +1,14 @@
import { Types } from "mongoose";
export interface IRolePermission{
roleId:Types.ObjectId;
permissions: Types.ObjectId[];
active: boolean;
createdBy: Types.ObjectId;
updateBy: Types.ObjectId;
}

View File

@ -0,0 +1,41 @@
import mongoose from "mongoose";
import { IRolePermission } from "./rolePermission.interface";
const rolePermissionSchema = new mongoose.Schema({
roleId:{
type: mongoose.Schema.Types.ObjectId,
ref:"Role",
required:true,
unique:true,
},
permissions:{
type: mongoose.Schema.Types.ObjectId,
ref:"Permission",
required:true
},
active:{
type:Boolean,
default:true
},
createdBy:{
type: mongoose.Schema.Types.ObjectId,
ref:"User",
required:true
},
updateBy:{
type: mongoose.Schema.Types.ObjectId,
ref:"User",
}
},
{
timestamps:true,
versionKey:false
}
);
export default mongoose.model<IRolePermission>("RolePermission", rolePermissionSchema);

View File

@ -0,0 +1,21 @@
import { Router } from "express";
import { RolePermissionController } from "./rolePermission.controller";
import { authMiddleware } from "../auth/auth.middleware";
const rolePermissionRoute = Router();
const controller = new RolePermissionController();
rolePermissionRoute.get("/", authMiddleware, controller.getAll);
rolePermissionRoute.get("/role/:roleId", authMiddleware, controller.getByRole);
rolePermissionRoute.get("/:id", authMiddleware, controller.getById);
rolePermissionRoute.post("/", authMiddleware, controller.create);
rolePermissionRoute.put("/:id", authMiddleware, controller.update);
rolePermissionRoute.delete("/:id", authMiddleware, controller.delete);
export default rolePermissionRoute;

View File

@ -0,0 +1,122 @@
import rolePermissionModel from "./rolePermission.model";
import { IRolePermission } from "./rolePermission.interface";
export class RolePermissionService {
async getAll() {
return await rolePermissionModel
.find()
.populate("roleId")
.populate("permissions")
.populate("createdBy", "userName")
.populate("updatedBy", "userName");
}
async getById(
id: string
) {
return await rolePermissionModel
.findById(id)
.populate("roleId")
.populate("permissions")
.populate("createdBy", "userName")
.populate("updatedBy", "userName");
}
async getByRole(
roleId: string
) {
return await rolePermissionModel
.findOne({
roleId,
active: true
})
.populate("roleId")
.populate("permissions")
.populate("createdBy", "userName")
.populate("updatedBy", "userName");
}
async getPermissionByRole(
roleId:string
){
const rolePermission = await rolePermissionModel.findOne({
roleId,
active:true
})
.populate("permissions");
if(!rolePermission){
return[];
}
return rolePermission.permissions;
}
async create(
data: IRolePermission
) {
const exists = await rolePermissionModel.findOne({
roleId: data.roleId
});
if (exists) {
throw new Error("Este rol ya tiene permisos asignados.");
}
return await rolePermissionModel.create(
data
);
}
async update(
id: string,
data: Partial<IRolePermission>
) {
return await rolePermissionModel.findByIdAndUpdate(
id,
data,
{
new: true
}
)
.populate("roleId")
.populate("permissions")
.populate("createdBy", "userName")
.populate("updatedBy", "userName");
}
async delete(
id: string
) {
return await rolePermissionModel.findByIdAndDelete(
id
);
}
}