Files
shomal-hospital-ticketing-b…/src/seeders/rolePermission.ts
2026-06-16 11:32:07 +03:30

184 lines
4.5 KiB
TypeScript

import Role from "../models/Role";
import Permission from "../models/Permission";
import RolePermission from "../models/RolePermission";
export async function seedRolePermissions() {
const roles = await Role.findAll();
const permissions = await Permission.findAll();
const roleMap: any = {};
roles.forEach((r: any) => (roleMap[r.name] = r));
const permissionMap: any = {};
permissions.forEach((p: any) => (permissionMap[p.name] = p));
const assignPermissions = async (
roleName: string,
permissionNames: string[],
) => {
const role = roleMap[roleName];
if (!role) return;
for (const permName of permissionNames) {
const permission = permissionMap[permName];
if (!permission) continue;
await RolePermission.findOrCreate({
where: {
roleId: role.id,
permissionId: permission.id,
},
defaults: {
roleId: role.id,
permissionId: permission.id,
},
});
}
};
/* =========================================
✅ MANAGER (دسترسی بالا)
========================================== */
/* =========================================
✅ MANAGER
========================================= */
/* =========================================
✅ MANAGER
========================================= */
await assignPermissions("manager", [
/* ---------- Tickets ---------- */
"ticket.view_all",
"ticket.assign",
"ticket.change_status",
"ticket.close",
"ticket.reopen",
"ticket.merge",
"ticket.export",
"ticket.create",
/* ---------- Users ---------- */
"user.view",
"user.view_all",
"user.create",
"user.update",
"user.activate",
"user.deactivate",
"user.assign_role",
/* ---------- Roles ---------- */
"role.view",
/* ---------- Permissions ---------- */
"permission.view",
"permission.view_all",
"permission.assign_to_role",
"permission.assign_to_user",
/* ---------- Departments ---------- */
"department.view",
"department.create",
"department.update",
/* ---------- Reports ---------- */
"report.system.view",
"report.system.export",
"report.department.view",
"report.department.export",
"report.operator.view",
"report.operator.export",
"report.sla.view",
"report.kpi.view",
"report.trend.view",
"report.closure_rate.view",
"report.critical.view",
"report.avg_resolution.view",
"report.aging.view",
"report.agent_efficiency.view",
"report.department_load.view",
"report.prediction.view",
"report.export_excel",
/* ---------- Dashboard ---------- */
"dashboard.view_advanced",
/* ---------- Operator ---------- */
"operator.view",
"operator.performance.view",
"operator.performance.export",
/* ---------- Logs ---------- */
"log.view",
"audit.view",
]);
/* =========================================
✅ SUPERVISOR
========================================= */
await assignPermissions("supervisor", [
/* Tickets */
"ticket.view_all",
"ticket.assign",
"ticket.change_status",
"ticket.comment",
"ticket.internal_note",
"ticket.close",
"ticket.reopen",
/* Reports */
"report.department.view",
"report.operator.view",
"report.trend.view",
"report.closure_rate.view",
"report.aging.view",
/* Dashboard */
"dashboard.view",
/* Operator */
"operator.view",
"operator.performance.view",
]);
/* =========================================
✅ SENIOR EXPERT
========================================= */
await assignPermissions("senior_expert", [
"ticket.view",
"ticket.change_status",
"ticket.comment",
"ticket.internal_note",
"ticket.upload_file",
"dashboard.view",
]);
/* =========================================
✅ EXPERT
========================================= */
await assignPermissions("expert", [
"ticket.view",
"ticket.change_status",
"ticket.comment",
"ticket.upload_file",
]);
/* =========================================
✅ TECHNICIAN
========================================= */
await assignPermissions("technician", [
"ticket.view",
"ticket.comment",
"ticket.upload_file",
]);
/* =========================================
✅ NORMAL USER
========================================= */
await assignPermissions("user", [
"ticket.create",
"ticket.view",
"ticket.comment",
"ticket.upload_file",
]);
console.log("✅ RolePermissions seeded successfully");
}