Mhdeusi commited on
Commit
729c079
·
verified ·
1 Parent(s): ae76285

Create user_management.js

Browse files
Files changed (1) hide show
  1. auth/user_management.js +156 -0
auth/user_management.js ADDED
@@ -0,0 +1,156 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ class UserManagement {
2
+ constructor() {
3
+ this.authManager = authManager;
4
+ }
5
+
6
+ getCurrentUser() {
7
+ return this.authManager.getCurrentUser();
8
+ }
9
+
10
+ getUserProfile() {
11
+ const user = this.getCurrentUser();
12
+ return user ? {
13
+ userId: user.userId,
14
+ username: user.username,
15
+ email: user.email,
16
+ role: user.role,
17
+ profile: user.profile,
18
+ progress: user.progress
19
+ } : null;
20
+ }
21
+
22
+ updateProfile(updates) {
23
+ const users = this.authManager.getUsers();
24
+ const currentUser = this.getCurrentUser();
25
+
26
+ if (!currentUser) {
27
+ return { success: false, message: 'User not authenticated' };
28
+ }
29
+
30
+ const user = users[currentUser.userId];
31
+ if (!user) {
32
+ return { success: false, message: 'User not found' };
33
+ }
34
+
35
+ // به‌روزرسانی فیلدها
36
+ if (updates.email) user.email = updates.email;
37
+ if (updates.profile) {
38
+ user.profile = { ...user.profile, ...updates.profile };
39
+ }
40
+
41
+ this.authManager.saveUsers(users);
42
+ this.authManager.setCurrentUser(user);
43
+
44
+ return { success: true, user: user };
45
+ }
46
+
47
+ changePassword(currentPassword, newPassword) {
48
+ const users = this.authManager.getUsers();
49
+ const currentUser = this.getCurrentUser();
50
+
51
+ if (!currentUser) {
52
+ return { success: false, message: 'User not authenticated' };
53
+ }
54
+
55
+ const user = users[currentUser.userId];
56
+ const currentHashedPassword = this.authManager.hashPassword(currentPassword);
57
+
58
+ if (user.password !== currentHashedPassword) {
59
+ return { success: false, message: 'Current password is incorrect' };
60
+ }
61
+
62
+ user.password = this.authManager.hashPassword(newPassword);
63
+ this.authManager.saveUsers(users);
64
+
65
+ return { success: true, message: 'Password changed successfully' };
66
+ }
67
+
68
+ getAllUsers() {
69
+ if (!authzManager.canManageUsers()) {
70
+ return { success: false, message: 'Access denied' };
71
+ }
72
+
73
+ const users = this.authManager.getUsers();
74
+ // حذف اطلاعات حساس قبل از بازگرداندن
75
+ const sanitizedUsers = {};
76
+ for (const userId in users) {
77
+ const user = users[userId];
78
+ sanitizedUsers[userId] = {
79
+ userId: user.userId,
80
+ username: user.username,
81
+ email: user.email,
82
+ role: user.role,
83
+ profile: user.profile,
84
+ progress: user.progress,
85
+ isActive: user.isActive,
86
+ createdAt: user.createdAt
87
+ };
88
+ }
89
+
90
+ return { success: true, users: sanitizedUsers };
91
+ }
92
+
93
+ deactivateUser(userId) {
94
+ if (!authzManager.canManageUsers()) {
95
+ return { success: false, message: 'Access denied' };
96
+ }
97
+
98
+ const users = this.authManager.getUsers();
99
+ if (users[userId]) {
100
+ users[userId].isActive = false;
101
+ this.authManager.saveUsers(users);
102
+ return { success: true, message: 'User deactivated successfully' };
103
+ }
104
+
105
+ return { success: false, message: 'User not found' };
106
+ }
107
+
108
+ getUserProgress(userId = null) {
109
+ const targetUserId = userId || (this.getCurrentUser()?.userId);
110
+ if (!targetUserId) {
111
+ return { success: false, message: 'User not specified' };
112
+ }
113
+
114
+ const users = this.authManager.getUsers();
115
+ const user = users[targetUserId];
116
+
117
+ if (!user) {
118
+ return { success: false, message: 'User not found' };
119
+ }
120
+
121
+ // اگر کاربر درخواست‌دهنده خود کاربر باشد یا ادمین باشد
122
+ const currentUser = this.getCurrentUser();
123
+ if (currentUser.userId !== targetUserId && !authzManager.canManageUsers()) {
124
+ return { success: false, message: 'Access denied' };
125
+ }
126
+
127
+ return { success: true, progress: user.progress };
128
+ }
129
+
130
+ updateUserProgress(score = 0, completedLesson = null) {
131
+ const currentUser = this.getCurrentUser();
132
+ if (!currentUser) {
133
+ return { success: false, message: 'User not authenticated' };
134
+ }
135
+
136
+ return this.authManager.updateUserProgress(currentUser.userId, score, completedLesson);
137
+ }
138
+
139
+ getLeaderboard(limit = 10) {
140
+ const users = this.authManager.getUsers();
141
+ const usersArray = Object.values(users)
142
+ .filter(user => user.isActive)
143
+ .map(user => ({
144
+ username: user.username,
145
+ profile: user.profile,
146
+ progress: user.progress
147
+ }))
148
+ .sort((a, b) => (b.progress.totalScore || 0) - (a.progress.totalScore || 0))
149
+ .slice(0, limit);
150
+
151
+ return { success: true, leaderboard: usersArray };
152
+ }
153
+ }
154
+
155
+ // ایجاد نمونه singleton
156
+ const userManager = new UserManagement();