Initial LisgloSIPS V2 implementation
This commit is contained in:
+144
@@ -0,0 +1,144 @@
|
||||
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);
|
||||
});
|
||||
Reference in New Issue
Block a user