Spaces:
Runtime error
Runtime error
File size: 4,423 Bytes
ea7d5b8 2c97468 0b92d37 ea7d5b8 d747060 ea7d5b8 0b92d37 d747060 0b92d37 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 |
import { Request, Response } from 'express';
import Role from '../models/roles';
import { FindOptions, Op } from 'sequelize';
import { logger } from '../utils/logger';
import Permission from '../models/permissions';
import RolePermission from '../models/rolePermissions';
const buildRoleWhereClause = (filter: Record<string, any>) => {
const whereClause: any = {};
if (filter) {
if (filter.name) {
whereClause.name = { [Op.like]: `%${filter.name}%` };
}
if (filter.date) {
const date = new Date(filter.date);
if (!isNaN(date.getTime())) {
const startOfDay = new Date(date);
startOfDay.setHours(0, 0, 0, 0);
const endOfDay = new Date(date);
endOfDay.setHours(23, 59, 59, 999);
whereClause.created_at = {
[Op.gte]: startOfDay,
[Op.lte]: endOfDay
};
}
}
if (filter.created_before) {
const beforeDate = new Date(filter.created_before);
if (!isNaN(beforeDate.getTime())) {
whereClause.created_at = { ...whereClause.created_at, [Op.lte]: beforeDate };
}
}
if (filter.created_after) {
const afterDate = new Date(filter.created_after);
if (!isNaN(afterDate.getTime())) {
whereClause.created_at = { ...whereClause.created_at, [Op.gte]: afterDate };
}
}
}
return whereClause;
}
const getAllRoles = async (req: Request, res: Response) => {
try {
const { sort_by, sort_order, page, limit } = req.query;
const filter = req.query.filter as Record<string, any>;
const allowedSortColumns = ['id', 'name', 'created_at'];
const whereClause = buildRoleWhereClause(filter);
const currentPage = parseInt(page as string) || 1;
const pageSize = parseInt(limit as string) || 10;
const options: FindOptions = {
where: whereClause,
limit: pageSize,
offset: (currentPage - 1) * pageSize,
order: []
};
if (sort_by && allowedSortColumns.includes(sort_by as string)) {
options.order = [[sort_by as string, sort_order === 'desc' ? 'DESC' : 'ASC']];
} else {
options.order = [['id', 'ASC']];
}
const [roles, totalRoles] = await Promise.all([
Role.findAll(options),
Role.count({ where: whereClause }),
]);
const data = {
page: currentPage,
limit: pageSize,
total: totalRoles,
data: roles
}
res.status(200).json(data);
} catch (error) {
logger.error('Error fetching roles:');
logger.error(error);
res.status(500).json({ error: 'Error fetching roles' });
}
}
const assignPermissionsToRole = async (req: Request, res: Response) => {
try {
const { roleId } = req.params;
const { permission_ids } = req.body;
// Validate if the role exists
const role = await Role.findByPk(roleId);
if (!role) {
return res.status(404).json({ error: 'Role not found' });
}
// Fetch all permissions that match the given IDs
const existingPermissions = await Permission.findAll({ where: { id: permission_ids } });
// Extract IDs of existing permissions
const existingPermissionIds = existingPermissions.map(permission => permission.id);
// Identify non-existent permissions
const nonExistentPermissionIds = permission_ids.filter((id: number) => !existingPermissionIds.includes(id));
// Assign only the existing permissions to the role
const rolePermissions = await Promise.all(
existingPermissionIds.map(async (permission_id: number) => {
return await RolePermission.create({ role_id: parseInt(roleId, 10), permission_id });
})
);
return res.status(201).json({
message: 'Permissions processed successfully',
assignedPermissions: rolePermissions,
nonExistentPermissions: nonExistentPermissionIds,
});
} catch (error) {
logger.error('Error assigning permissions to role:');
logger.error(error);
return res.status(500).json({
error: 'Error while assigning permissions to the role.',
});
}
};
export { getAllRoles,assignPermissionsToRole } |