1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
| class User { constructor(name, email, role, permissions) { this.name = name; this.email = email; this.role = role; this.permissions = permissions; this.createdAt = new Date(); this.id = User.generateId(); }
hasPermission(permission) { return this.permissions.includes(permission); }
getInfo() { return { id: this.id, name: this.name, email: this.email, role: this.role, createdAt: this.createdAt }; }
static generateId() { return `user_${Date.now()}_${Math.random().toString(36).substr(2, 5)}`; }
static createAdmin(name, email) { const adminPermissions = [ 'read', 'write', 'delete', 'manage_users', 'manage_system', 'view_analytics' ]; return new User(name, email, 'admin', adminPermissions); }
static createRegularUser(name, email) { const userPermissions = ['read', 'write']; return new User(name, email, 'user', userPermissions); }
static createGuest(name = 'Guest') { const guestPermissions = ['read']; return new User(name, 'guest@example.com', 'guest', guestPermissions); }
static createBatch(userDataArray) { return userDataArray.map(userData => { switch (userData.role) { case 'admin': return User.createAdmin(userData.name, userData.email); case 'user': return User.createRegularUser(userData.name, userData.email); case 'guest': return User.createGuest(userData.name); default: throw new Error(`Unknown role: ${userData.role}`); } }); }
static validateEmail(email) { const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; return emailRegex.test(email); }
static validateUserData(userData) { const errors = [];
if (!userData.name || userData.name.trim().length < 2) { errors.push('Name must be at least 2 characters long'); }
if (!this.validateEmail(userData.email)) { errors.push('Invalid email format'); }
if (!['admin', 'user', 'guest'].includes(userData.role)) { errors.push('Invalid role'); }
return { isValid: errors.length === 0, errors }; } }
const admin = User.createAdmin('John Admin', 'john@admin.com'); const regularUser = User.createRegularUser('Jane User', 'jane@user.com'); const guest = User.createGuest();
console.log('Admin info:', admin.getInfo()); console.log('Admin has manage_users permission:', admin.hasPermission('manage_users'));
console.log('Regular user info:', regularUser.getInfo()); console.log('Regular user has delete permission:', regularUser.hasPermission('delete'));
const usersData = [ { name: 'Alice', email: 'alice@example.com', role: 'admin' }, { name: 'Bob', email: 'bob@example.com', role: 'user' }, { name: 'Charlie', role: 'guest' } ];
const users = User.createBatch(usersData); console.log('Batch created users:', users.map(user => user.getInfo()));
const validation = User.validateUserData({ name: 'Test User', email: 'invalid-email', role: 'unknown' }); console.log('Validation result:', validation);
|