| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- /**
- * 清除 _User 表的权限字段 (role/store/district) + 清空 ResponsibilityAssignment 表
- * 用于重置权限数据,方便重新测试
- * 注意:总监 (role='director') 不会被清除,因为是管理员
- *
- * 用法: cd backend && npx tsx scripts/cleanup-permission-data.ts
- */
- import 'dotenv/config';
- import Parse from '../src/db/parse-client.js';
- async function main(): Promise<void> {
- console.log('=== 清理权限数据 ===');
- console.log(`Server: ${Parse.serverURL}`);
- console.log(`App ID: ${Parse.applicationId}\n`);
- // 验证连接
- try {
- const n = await new Parse.Query('_User').count({ useMasterKey: true });
- console.log(`✅ Parse 连接正常 (_User: ${n} 条)\n`);
- } catch (err: any) {
- console.error(`❌ Parse 连接失败: ${err.message}`);
- process.exit(1);
- }
- // ======== 1. 清除 _User 权限字段(跳过总监) ========
- console.log('--- 1. 清除 _User 权限字段 (role, store, district) ---');
- const userQ = new Parse.Query('_User');
- userQ.limit(500);
- const users = await userQ.find({ useMasterKey: true }) as any[];
- let userCleared = 0;
- let directorSkipped = 0;
- for (const user of users) {
- const role = user.get('role');
- const store = user.get('store');
- const district = user.get('district');
- // 跳过总监(管理员),不清除其权限
- if (role === 'director') {
- directorSkipped++;
- continue;
- }
- if (!role && !store && !district) continue;
- user.unset('role');
- user.unset('store');
- user.unset('district');
- await user.save(null, { useMasterKey: true });
- userCleared++;
- }
- console.log(` 已清除 ${userCleared} 个用户的权限字段`);
- if (directorSkipped > 0) console.log(` 跳过 ${directorSkipped} 个总监(管理员)`);
- // ======== 2. 清空 ResponsibilityAssignment ========
- console.log('\n--- 2. 清空 ResponsibilityAssignment 表 ---');
- const raQ = new Parse.Query('ResponsibilityAssignment');
- raQ.limit(1000);
- const assignments = await raQ.find({ useMasterKey: true }) as any[];
- if (assignments.length > 0) {
- await Parse.Object.destroyAll(assignments, { useMasterKey: true });
- console.log(` 已删除 ${assignments.length} 条记录`);
- } else {
- console.log(' 表中无数据');
- }
- console.log('\n=== 清理完成 ===');
- }
- main().catch((err) => {
- console.error('失败:', err.message);
- process.exit(1);
- });
|