Files
dsc-api/database/seeders/role.seeder.ts
morteza c82cc654f0
Build and Deploy Docker Images / build_and_deploy (push) Has been cancelled
add title to permission
2026-07-19 16:37:45 +03:30

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);
}
};