Mhdeusi commited on
Commit
0fc9aa4
·
verified ·
1 Parent(s): 970ea0f

Create user_management.py

Browse files
Files changed (1) hide show
  1. auth/user_management.py +143 -0
auth/user_management.py ADDED
@@ -0,0 +1,143 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from datetime import datetime
2
+ from .authentication import auth_manager
3
+ import json
4
+ import os
5
+
6
+ class UserManagement:
7
+ def __init__(self, users_file='data/users.json'):
8
+ self.users_file = users_file
9
+ self.users = self.load_users()
10
+
11
+ def load_users(self):
12
+ """بارگذاری کاربران از فایل"""
13
+ try:
14
+ if os.path.exists(self.users_file):
15
+ with open(self.users_file, 'r', encoding='utf-8') as f:
16
+ return json.load(f)
17
+ return {}
18
+ except Exception as e:
19
+ print(f"Error loading users: {e}")
20
+ return {}
21
+
22
+ def save_users(self):
23
+ """ذخیره کاربران در فایل"""
24
+ try:
25
+ os.makedirs(os.path.dirname(self.users_file), exist_ok=True)
26
+ with open(self.users_file, 'w', encoding='utf-8') as f:
27
+ json.dump(self.users, f, ensure_ascii=False, indent=2)
28
+ return True
29
+ except Exception as e:
30
+ print(f"Error saving users: {e}")
31
+ return False
32
+
33
+ def register_user(self, username, email, password, role='student', **extra_data):
34
+ """ثبت نام کاربر جدید"""
35
+ # بررسی تکراری نبودن username و email
36
+ for user_id, user_data in self.users.items():
37
+ if user_data['username'] == username:
38
+ return False, "Username already exists"
39
+ if user_data['email'] == email:
40
+ return False, "Email already exists"
41
+
42
+ # ایجاد کاربر جدید
43
+ user_id = str(len(self.users) + 1)
44
+ hashed_password = auth_manager.hash_password(password)
45
+
46
+ self.users[user_id] = {
47
+ 'user_id': user_id,
48
+ 'username': username,
49
+ 'email': email,
50
+ 'password': hashed_password,
51
+ 'role': role,
52
+ 'created_at': datetime.now().isoformat(),
53
+ 'last_login': None,
54
+ 'profile': {
55
+ 'full_name': extra_data.get('full_name', ''),
56
+ 'bio': extra_data.get('bio', ''),
57
+ 'avatar': extra_data.get('avatar', '')
58
+ },
59
+ 'progress': {
60
+ 'total_score': 0,
61
+ 'completed_lessons': [],
62
+ 'current_lesson': 1,
63
+ 'achievements': []
64
+ },
65
+ 'is_active': True
66
+ }
67
+
68
+ if self.save_users():
69
+ return True, user_id
70
+ return False, "Error saving user data"
71
+
72
+ def authenticate_user(self, username, password):
73
+ """احراز هویت کاربر"""
74
+ for user_id, user_data in self.users.items():
75
+ if user_data['username'] == username and user_data['is_active']:
76
+ if auth_manager.check_password(user_data['password'], password):
77
+ # به‌روزرسانی آخرین زمان ورود
78
+ user_data['last_login'] = datetime.now().isoformat()
79
+ self.save_users()
80
+
81
+ return True, {
82
+ 'user_id': user_id,
83
+ 'username': user_data['username'],
84
+ 'role': user_data['role'],
85
+ 'profile': user_data['profile']
86
+ }
87
+ else:
88
+ return False, "Invalid password"
89
+
90
+ return False, "User not found"
91
+
92
+ def get_user(self, user_id):
93
+ """دریافت اطلاعات کاربر"""
94
+ return self.users.get(user_id)
95
+
96
+ def update_user_profile(self, user_id, **updates):
97
+ """به‌روزرسانی پروفایل کاربر"""
98
+ if user_id not in self.users:
99
+ return False, "User not found"
100
+
101
+ user = self.users[user_id]
102
+
103
+ # به‌روزرسانی فیلدهای اصلی
104
+ if 'email' in updates:
105
+ user['email'] = updates['email']
106
+
107
+ # به‌روزرسانی پروفایل
108
+ if 'profile' in updates:
109
+ for key, value in updates['profile'].items():
110
+ if value is not None:
111
+ user['profile'][key] = value
112
+
113
+ # به‌روزرسانی progress
114
+ if 'progress' in updates:
115
+ for key, value in updates['progress'].items():
116
+ if key == 'total_score':
117
+ user['progress'][key] += value
118
+ elif key == 'completed_lessons':
119
+ if value not in user['progress'][key]:
120
+ user['progress'][key].append(value)
121
+ else:
122
+ user['progress'][key] = value
123
+
124
+ if self.save_users():
125
+ return True, "Profile updated successfully"
126
+ return False, "Error updating profile"
127
+
128
+ def deactivate_user(self, user_id):
129
+ """غیرفعال کردن کاربر"""
130
+ if user_id in self.users:
131
+ self.users[user_id]['is_active'] = False
132
+ return self.save_users()
133
+ return False
134
+
135
+ def get_user_progress(self, user_id):
136
+ """دریافت پیشرفت کاربر"""
137
+ user = self.get_user(user_id)
138
+ if user:
139
+ return user.get('progress', {})
140
+ return None
141
+
142
+ # نمونه singleton
143
+ user_manager = UserManagement()