Files
lisglosips/prisma/seed.ts
T

145 lines
4.3 KiB
TypeScript

import { PrismaClient } from '@prisma/client';
const prisma = new PrismaClient();
const permissions = [
['dashboard.view', 'dashboard', 'view', '查看 Dashboard 指标'],
['customers.view', 'customers', 'view', '查看客户'],
['customers.manage', 'customers', 'manage', '管理客户'],
['customer_gateways.view', 'customer_gateways', 'view', '查看客户网关'],
['customer_gateways.manage', 'customer_gateways', 'manage', '管理客户网关和策略'],
['vendors.view', 'vendors', 'view', '查看供应商'],
['vendors.manage', 'vendors', 'manage', '管理供应商'],
['vendor_gateways.view', 'vendor_gateways', 'view', '查看落地网关'],
['vendor_gateways.manage', 'vendor_gateways', 'manage', '管理落地网关'],
['line_groups.view', 'line_groups', 'view', '查看落地线路组'],
['line_groups.manage', 'line_groups', 'manage', '管理落地线路组'],
['recharges.view', 'recharges', 'view', '查看充值流水'],
['recharges.manage', 'recharges', 'manage', '执行客户或供应商充值'],
['cdr.view', 'cdr', 'view', '查看话单'],
['recordings.play', 'recordings', 'play', '播放录音'],
['quality.view', 'quality', 'view', '查看质检任务'],
['quality.manage', 'quality', 'manage', '保存质检结果'],
['users.view', 'users', 'view', '查看用户'],
['users.manage', 'users', 'manage', '管理用户'],
['roles.view', 'roles', 'view', '查看角色权限'],
['roles.manage', 'roles', 'manage', '管理角色权限'],
['audit.view', 'audit', 'view', '查看操作日志']
] as const;
const roles = [
{
id: 'ROLE_SUPER_ADMIN',
name: '超级管理员',
description: '系统内置最高权限角色',
permissionIds: permissions.map(([id]) => id)
},
{
id: 'ROLE_OPERATOR',
name: '运营管理员',
description: '客户、网关、线路和话单运营',
permissionIds: [
'dashboard.view',
'customers.view',
'customers.manage',
'customer_gateways.view',
'customer_gateways.manage',
'vendors.view',
'vendor_gateways.view',
'line_groups.view',
'line_groups.manage',
'cdr.view',
'recordings.play'
]
},
{
id: 'ROLE_FINANCE',
name: '财务',
description: '充值、余额和财务流水',
permissionIds: ['dashboard.view', 'customers.view', 'vendors.view', 'recharges.view', 'recharges.manage', 'cdr.view']
},
{
id: 'ROLE_QUALITY',
name: '质检',
description: '录音抽检和质检结果维护',
permissionIds: ['dashboard.view', 'cdr.view', 'recordings.play', 'quality.view', 'quality.manage']
},
{
id: 'ROLE_TECH_OPS',
name: '技术运维',
description: '网关、线路、信令和审计排障',
permissionIds: [
'dashboard.view',
'customer_gateways.view',
'vendors.view',
'vendor_gateways.view',
'vendor_gateways.manage',
'line_groups.view',
'cdr.view',
'recordings.play',
'audit.view'
]
}
];
async function main(): Promise<void> {
await prisma.$transaction(
async (tx) => {
for (const [id, module, action, description] of permissions) {
await tx.permission.upsert({
where: { id },
update: { module, action, description },
create: { id, module, action, description }
});
}
for (const role of roles) {
await tx.role.upsert({
where: { id: role.id },
update: {
name: role.name,
description: role.description,
builtIn: true,
status: 'ENABLED'
},
create: {
id: role.id,
name: role.name,
description: role.description,
builtIn: true,
status: 'ENABLED'
}
});
for (const permissionId of role.permissionIds) {
await tx.rolePermission.upsert({
where: {
roleId_permissionId: {
roleId: role.id,
permissionId
}
},
update: {},
create: {
roleId: role.id,
permissionId
}
});
}
}
},
{
timeout: 30000
}
);
}
main()
.finally(async () => {
await prisma.$disconnect();
})
.catch((error) => {
console.error(error);
process.exit(1);
});