refactor: change the role to roles and many to many
This commit is contained in:
@@ -1,11 +1,11 @@
|
||||
import { Logger } from "@nestjs/common";
|
||||
|
||||
import { connectionSource } from "./connection";
|
||||
// import { seedAdmin } from "./seeders/admin.seeder";
|
||||
import { seedAdmin } from "./seeders/admin.seeder";
|
||||
import { seedCityAndProvince } from "./seeders/iran-city.seeder";
|
||||
// import { seedNotifSettings } from "./seeders/notif-setting.seeder";
|
||||
// import { seedPaymentGateways } from "./seeders/payment-gateway.seeder";
|
||||
// import { seedRole } from "./seeders/role.seeder";
|
||||
import { seedNotifSettings } from "./seeders/notif-setting.seeder";
|
||||
import { seedPaymentGateways } from "./seeders/payment-gateway.seeder";
|
||||
import { seedPermissionsAndRoles } from "./seeders/role.seeder";
|
||||
|
||||
const logger = new Logger("Seeder");
|
||||
|
||||
@@ -13,11 +13,11 @@ export const runSeeder = async () => {
|
||||
await connectionSource.initialize();
|
||||
logger.log("start seeding database");
|
||||
//
|
||||
// await seedRole(connectionSource, logger);
|
||||
// await seedAdmin(connectionSource, logger);
|
||||
// await seedNotifSettings(connectionSource, logger);
|
||||
// await seedPaymentGateways(connectionSource, logger);
|
||||
await seedCityAndProvince(connectionSource, logger);
|
||||
await seedPermissionsAndRoles(connectionSource, logger);
|
||||
await seedAdmin(connectionSource, logger);
|
||||
await seedNotifSettings(connectionSource, logger);
|
||||
await seedPaymentGateways(connectionSource, logger);
|
||||
|
||||
logger.log("seeding completed");
|
||||
process.exit(0);
|
||||
|
||||
@@ -26,7 +26,7 @@ export const seedAdmin = async (dataSource: DataSource, logger: Logger) => {
|
||||
|
||||
const hashedPassword = await hash(defaultAdmin.password!, 10);
|
||||
|
||||
const admin = userRepo.create({ ...defaultAdmin, password: hashedPassword, role: adminRole });
|
||||
const admin = userRepo.create({ ...defaultAdmin, password: hashedPassword, roles: [adminRole] });
|
||||
await userRepo.save(admin);
|
||||
logger.log("admin created successfully");
|
||||
} catch (error) {
|
||||
|
||||
@@ -1,21 +1,68 @@
|
||||
import { Logger } from "@nestjs/common";
|
||||
import { DataSource } from "typeorm";
|
||||
|
||||
import { Permission } from "../../src/modules/users/entities/permission.entity";
|
||||
import { Role } from "../../src/modules/users/entities/role.entity";
|
||||
import { PermissionEnum } from "../../src/modules/users/enums/permission.enum";
|
||||
import { RoleEnum } from "../../src/modules/users/enums/role.enum";
|
||||
|
||||
const roles = [{ name: RoleEnum.SUPER_ADMIN }, { name: RoleEnum.ADMIN }, { name: RoleEnum.VISITOR }, { name: RoleEnum.USER }];
|
||||
// Define permissions
|
||||
const permissions = Object.values(PermissionEnum).map((perm) => ({ name: perm }));
|
||||
|
||||
export const seedRole = async (dataSource: DataSource, logger: Logger) => {
|
||||
// Define roles with their default permissions
|
||||
const rolesWithPermissions: { name: RoleEnum; permissions: PermissionEnum[] }[] = [
|
||||
{
|
||||
name: RoleEnum.ADMIN,
|
||||
permissions: Object.values(PermissionEnum),
|
||||
},
|
||||
{
|
||||
name: RoleEnum.AGENT,
|
||||
permissions: [PermissionEnum.CUSTOMERS, PermissionEnum.TICKETS, PermissionEnum.TRANSACTIONS],
|
||||
},
|
||||
{
|
||||
name: RoleEnum.DEVELOPER,
|
||||
permissions: [PermissionEnum.SERVICES, PermissionEnum.LOGS, PermissionEnum.LEARNINGS],
|
||||
},
|
||||
{
|
||||
name: RoleEnum.USER,
|
||||
permissions: [],
|
||||
},
|
||||
];
|
||||
|
||||
export const seedPermissionsAndRoles = async (dataSource: DataSource, logger: Logger) => {
|
||||
try {
|
||||
const permissionRepo = dataSource.getRepository(Permission);
|
||||
const roleRepo = dataSource.getRepository(Role);
|
||||
for (const role of roles) {
|
||||
const newRole = roleRepo.create(role);
|
||||
await roleRepo.save(newRole);
|
||||
|
||||
// Seed Permissions
|
||||
logger.log("Seeding Permissions...");
|
||||
for (const perm of permissions) {
|
||||
const existingPerm = await permissionRepo.findOne({ where: { name: perm.name } });
|
||||
if (!existingPerm) {
|
||||
const newPerm = permissionRepo.create(perm);
|
||||
await permissionRepo.save(newPerm);
|
||||
}
|
||||
}
|
||||
logger.log("Role seeded successfully");
|
||||
logger.log("Permissions seeded successfully");
|
||||
|
||||
// Fetch all saved permissions
|
||||
const allPermissions = await permissionRepo.find();
|
||||
|
||||
// Seed Roles with permissions
|
||||
logger.log("Seeding Roles with Permissions...");
|
||||
for (const roleData of rolesWithPermissions) {
|
||||
let role = await roleRepo.findOne({ where: { name: roleData.name }, relations: ["permissions"] });
|
||||
|
||||
if (!role) {
|
||||
role = roleRepo.create({ name: roleData.name, permissions: [] });
|
||||
}
|
||||
|
||||
role.permissions = allPermissions.filter((perm) => roleData.permissions.includes(perm.name as PermissionEnum));
|
||||
await roleRepo.save(role);
|
||||
}
|
||||
logger.log("Roles and Permissions seeded successfully");
|
||||
} catch (error) {
|
||||
logger.error("Error in seeding role", error);
|
||||
logger.error("Error in seeding roles and permissions", error);
|
||||
process.exit(1);
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user