102 lines
4.1 KiB
TypeScript
Executable File
102 lines
4.1 KiB
TypeScript
Executable File
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 permissionTitles: Record<PermissionEnum, string> = {
|
|
[PermissionEnum.SERVICES]: "سرویسها",
|
|
[PermissionEnum.CUSTOMERS]: "مشتریان",
|
|
[PermissionEnum.AGENTS]: "نمایندگان",
|
|
[PermissionEnum.DEVELOPERS]: "توسعهدهندگان",
|
|
[PermissionEnum.INVOICES]: "صورتحسابها",
|
|
[PermissionEnum.TRANSACTIONS]: "تراکنشها",
|
|
[PermissionEnum.DISCOUNTS]: "تخفیفها",
|
|
[PermissionEnum.ADMINS]: "ادمینها",
|
|
[PermissionEnum.TICKETS]: "تیکتها",
|
|
[PermissionEnum.CRITICISMS]: "انتقادات",
|
|
[PermissionEnum.CONTACTS_US]: "تماس با ما",
|
|
[PermissionEnum.ADVERTISEMENTS]: "تبلیغات",
|
|
[PermissionEnum.ANNOUNCEMENTS]: "اطلاعیهها",
|
|
[PermissionEnum.BLOGS]: "بلاگها",
|
|
[PermissionEnum.LEARNINGS]: "آموزشها",
|
|
[PermissionEnum.LOGS]: "لاگها",
|
|
[PermissionEnum.SETTINGS]: "تنظیمات",
|
|
[PermissionEnum.BANK_ACCOUNTS]: "حسابهای بانکی",
|
|
[PermissionEnum.PAYMENTS]: "پرداختها",
|
|
[PermissionEnum.MANAGE_SSO_CLIENTS]: "مدیریت کلاینتهای SSO",
|
|
[PermissionEnum.SUPPORT_PLAN]: "پلن پشتیبانی",
|
|
[PermissionEnum.DMENU]: "دیمنو",
|
|
[PermissionEnum.DKALA]: "دیکالا",
|
|
[PermissionEnum.DPAGE]: "دیپیج",
|
|
[PermissionEnum.DMAIL]: "دیمیل",
|
|
[PermissionEnum.RESELLER]: "نمایندگی فروش",
|
|
[PermissionEnum.WORKSPACE]: "فضای کار",
|
|
[PermissionEnum.VIEW_ALL_WORKSPACES]: "مشاهده همه فضاهای کار",
|
|
[PermissionEnum.PROJECT]: "پروژه",
|
|
[PermissionEnum.VIEW_ALL_PROJECTS]: "مشاهده همه پروژهها",
|
|
[PermissionEnum.TASK]: "وظیفه",
|
|
[PermissionEnum.TASK_PHASE]: "فاز وظیفه",
|
|
};
|
|
|
|
// Define permissions
|
|
const permissions = Object.values(PermissionEnum).map((perm) => ({
|
|
name: perm,
|
|
title: permissionTitles[perm],
|
|
}));
|
|
|
|
// Define roles with their default permissions
|
|
const rolesWithPermissions: { name: RoleEnum; permissions: PermissionEnum[] }[] = [
|
|
{
|
|
name: RoleEnum.SUPER_ADMIN,
|
|
permissions: Object.values(PermissionEnum),
|
|
},
|
|
{
|
|
name: RoleEnum.USER,
|
|
permissions: [],
|
|
},
|
|
];
|
|
|
|
export const seedPermissionsAndRoles = async (dataSource: DataSource, logger: Logger) => {
|
|
try {
|
|
const permissionRepo = dataSource.getRepository("Permission");
|
|
const roleRepo = dataSource.getRepository("Role");
|
|
|
|
// 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);
|
|
} else if (!existingPerm.title || existingPerm.title !== perm.title) {
|
|
existingPerm.title = perm.title;
|
|
await permissionRepo.save(existingPerm);
|
|
}
|
|
}
|
|
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: [], isAdmin: roleData.name === RoleEnum.SUPER_ADMIN });
|
|
}
|
|
|
|
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 roles and permissions", error);
|
|
process.exit(1);
|
|
}
|
|
};
|