const mongoose = require('mongoose'); const User = require('./models/User'); const Role = require('./models/Role'); const UserRole = require('./models/UserRole'); const Permission = require('./models/Permission'); const RolePerm = require('./models/RolePerm'); const { hashPassword } = require('./utils/password'); async function init() { await mongoose.connect(process.env.MONGODB_URI || 'mongodb://localhost:27017/e-scooter-rental'); console.log('๐Ÿ“ฆ MongoDB ่ฟžๆŽฅๆˆๅŠŸ๏ผŒๅผ€ๅง‹ๅˆๅง‹ๅŒ– RBAC...'); // ๆธ…็†ๆ—งๆ•ฐๆฎ๏ผˆๅฏ้€‰๏ผŒ็”Ÿไบง็Žฏๅขƒ่ฏทๆณจ้‡Šๆމ๏ผ‰ await RolePerm.deleteMany({}); await Permission.deleteMany({}); await UserRole.deleteMany({}); await Role.deleteMany({}); await User.deleteMany({}); // 1. ๅˆ›ๅปบ่ง’่‰ฒ const roles = { admin: await Role.create({ roleName: 'admin', roleLabel: '็ฎก็†ๅ‘˜', description: '็ณป็ปŸ็ฎก็†ๅ‘˜' }), store: await Role.create({ roleName: 'store', roleLabel: 'ๅ•†ๅฎถ', description: '้—จๅบ—็ฎก็†ๅ‘˜' }), rider: await Role.create({ roleName: 'rider', roleLabel: '้ช‘ๆ‰‹', description: '้ช‘ๆ‰‹็”จๆˆท' }) }; console.log('โœ… ่ง’่‰ฒๅˆ›ๅปบๅฎŒๆˆ'); // 2. ๅˆ›ๅปบๆƒ้™ const perms = { vehiclesRead: await Permission.create({ permName: 'vehicles:read', permLabel: 'ๆŸฅ็œ‹่ฝฆ่พ†', module: 'vehicles', action: 'read' }), vehiclesWrite: await Permission.create({ permName: 'vehicles:write', permLabel: '็ฎก็†่ฝฆ่พ†', module: 'vehicles', action: 'write' }), ordersRead: await Permission.create({ permName: 'orders:read', permLabel: 'ๆŸฅ็œ‹่ฎขๅ•', module: 'orders', action: 'read' }), ordersWrite: await Permission.create({ permName: 'orders:write', permLabel: '็ฎก็†่ฎขๅ•', module: 'orders', action: 'write' }), financeRead: await Permission.create({ permName: 'finance:read', permLabel: 'ๆŸฅ็œ‹่ดขๅŠก', module: 'finance', action: 'read' }), usersRead: await Permission.create({ permName: 'users:read', permLabel: 'ๆŸฅ็œ‹็”จๆˆท', module: 'users', action: 'read' }), usersWrite: await Permission.create({ permName: 'users:write', permLabel: '็ฎก็†็”จๆˆท', module: 'users', action: 'write' }), storeRead: await Permission.create({ permName: 'store:read', permLabel: 'ๆŸฅ็œ‹้—จๅบ—', module: 'store', action: 'read' }), storeWrite: await Permission.create({ permName: 'store:write', permLabel: '็ฎก็†้—จๅบ—', module: 'store', action: 'write' }), customersRead: await Permission.create({ permName: 'customers:read', permLabel: 'ๆŸฅ็œ‹ๅฎขๆˆท', module: 'customers', action: 'read' }), customersWrite: await Permission.create({ permName: 'customers:write', permLabel: '็ฎก็†ๅฎขๆˆท', module: 'customers', action: 'write' }), applicationsRead: await Permission.create({ permName: 'applications:read', permLabel: 'ๆŸฅ็œ‹็”ณ่ฏท', module: 'applications', action: 'read' }), applicationsWrite: await Permission.create({ permName: 'applications:write', permLabel: '็ฎก็†็”ณ่ฏท', module: 'applications', action: 'write' }), complaintsRead: await Permission.create({ permName: 'complaints:read', permLabel: 'ๆŸฅ็œ‹ๆŠ•่ฏ‰', module: 'complaints', action: 'read' }), complaintsWrite: await Permission.create({ permName: 'complaints:write', permLabel: '็ฎก็†ๆŠ•่ฏ‰', module: 'complaints', action: 'write' }), disputesRead: await Permission.create({ permName: 'disputes:read', permLabel: 'ๆŸฅ็œ‹็บ ็บท', module: 'disputes', action: 'read' }), disputesWrite: await Permission.create({ permName: 'disputes:write', permLabel: '็ฎก็†็บ ็บท', module: 'disputes', action: 'write' }), approvalsRead: await Permission.create({ permName: 'approvals:read', permLabel: 'ๆŸฅ็œ‹ๅฎกๆ‰น', module: 'approvals', action: 'read' }), approvalsWrite: await Permission.create({ permName: 'approvals:write', permLabel: '็ฎก็†ๅฎกๆ‰น', module: 'approvals', action: 'write' }), paymentsRead: await Permission.create({ permName: 'payments:read', permLabel: 'ๆŸฅ็œ‹ๆ”ฏไป˜', module: 'payments', action: 'read' }), paymentsWrite: await Permission.create({ permName: 'payments:write', permLabel: '็ฎก็†ๆ”ฏไป˜', module: 'payments', action: 'write' }), vehicleTypesRead: await Permission.create({ permName: 'vehicleTypes:read', permLabel: 'ๆŸฅ็œ‹่ฝฆๅž‹', module: 'vehicleTypes', action: 'read' }), vehicleTypesWrite: await Permission.create({ permName: 'vehicleTypes:write', permLabel: '็ฎก็†่ฝฆๅž‹', module: 'vehicleTypes', action: 'write' }), }; console.log('โœ… ๆƒ้™ๅˆ›ๅปบๅฎŒๆˆ'); // 3. ่ง’่‰ฒ-ๆƒ้™ๅ…ณ่” // admin: ๆ‰€ๆœ‰ๆƒ้™ for (const key of Object.keys(perms)) { await RolePerm.create({ role: roles.admin._id, permission: perms[key]._id }); } // store: ้—จๅบ— + ่ฎขๅ• + ่ฝฆ่พ† + ๅฎขๆˆท + ๆŠ•่ฏ‰ + ็”ณ่ฏท + ๆ”ฏไป˜ + ่ฝฆๅž‹๏ผˆ้ƒจๅˆ†ๅ†™ๆƒ้™๏ผ‰ const storePerms = [ 'storeRead', 'storeWrite', 'ordersRead', 'ordersWrite', 'vehiclesRead', 'vehiclesWrite', 'customersRead', 'customersWrite', 'complaintsRead', 'complaintsWrite', 'applicationsRead', 'applicationsWrite', 'paymentsRead', 'paymentsWrite', 'disputesRead', 'vehicleTypesRead' ]; for (const key of storePerms) { await RolePerm.create({ role: roles.store._id, permission: perms[key]._id }); } // rider: ๅช่ฏป้ƒจๅˆ† const riderPerms = [ 'ordersRead', 'vehiclesRead', 'customersRead', 'vehicleTypesRead' ]; for (const key of riderPerms) { await RolePerm.create({ role: roles.rider._id, permission: perms[key]._id }); } console.log('โœ… ่ง’่‰ฒ-ๆƒ้™ๅ…ณ่”ๅฎŒๆˆ'); // 4. ๅˆ›ๅปบ้ป˜่ฎค admin ่ดฆๅท const hashed = await hashPassword('admin123'); const adminUser = await User.create({ username: 'admin', password: hashed, name: '็ณป็ปŸ็ฎก็†ๅ‘˜', type: 'admin', status: 'active' }); await UserRole.create({ user: adminUser._id, role: roles.admin._id }); console.log(''); console.log('โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•'); console.log('โœ… RBAC ๅˆๅง‹ๅŒ–ๅฎŒๆˆ๏ผ'); console.log('้ป˜่ฎค่ดฆๅท: admin / admin123'); console.log('โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•'); await mongoose.disconnect(); } init().catch(err => { console.error('โŒ RBAC ๅˆๅง‹ๅŒ–ๅคฑ่ดฅ:', err); process.exit(1); });