184 lines
4.5 KiB
TypeScript
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");
|
|
}
|