Spaces:
Running
Running
feat: Update user accounts with personalized credentials
Browse files- Update user accounts to use custom names: aalekh, admin, ishita, jeeb
- Use standardized password format: name@maptrees for all users
- Aalekh has admin privileges for full system control
- Admin account for administrative tasks
- Ishita and Jeeb have researcher roles with edit_own permissions
- Update login page with new account selection
- Auto-select Ishita account for easy testing
- Maintain role-based permission system
- auth.py +17 -17
- static/login.html +13 -13
auth.py
CHANGED
@@ -18,34 +18,34 @@ class AuthManager:
|
|
18 |
|
19 |
# Predefined user accounts (in production, use a database)
|
20 |
self.users = {
|
21 |
-
#
|
22 |
-
"
|
23 |
-
"password_hash": self._hash_password("
|
24 |
"role": "admin",
|
25 |
-
"full_name": "
|
26 |
"permissions": ["read", "write", "delete", "admin"]
|
27 |
},
|
28 |
|
29 |
-
# System account
|
30 |
-
"
|
31 |
-
"password_hash": self._hash_password("
|
32 |
-
"role": "
|
33 |
-
"full_name": "System
|
34 |
-
"permissions": ["read", "write", "delete", "
|
35 |
},
|
36 |
|
37 |
-
# User accounts
|
38 |
-
"
|
39 |
-
"password_hash": self._hash_password("
|
40 |
"role": "researcher",
|
41 |
-
"full_name": "
|
42 |
"permissions": ["read", "write", "edit_own"]
|
43 |
},
|
44 |
|
45 |
-
"
|
46 |
-
"password_hash": self._hash_password("
|
47 |
"role": "researcher",
|
48 |
-
"full_name": "
|
49 |
"permissions": ["read", "write", "edit_own"]
|
50 |
}
|
51 |
}
|
|
|
18 |
|
19 |
# Predefined user accounts (in production, use a database)
|
20 |
self.users = {
|
21 |
+
# Administrator account
|
22 |
+
"aalekh": {
|
23 |
+
"password_hash": self._hash_password("aalekh@maptrees"),
|
24 |
"role": "admin",
|
25 |
+
"full_name": "Aalekh",
|
26 |
"permissions": ["read", "write", "delete", "admin"]
|
27 |
},
|
28 |
|
29 |
+
# System account (for admin use)
|
30 |
+
"admin": {
|
31 |
+
"password_hash": self._hash_password("admin@maptrees"),
|
32 |
+
"role": "admin",
|
33 |
+
"full_name": "System Administrator",
|
34 |
+
"permissions": ["read", "write", "delete", "admin"]
|
35 |
},
|
36 |
|
37 |
+
# User accounts
|
38 |
+
"ishita": {
|
39 |
+
"password_hash": self._hash_password("ishita@maptrees"),
|
40 |
"role": "researcher",
|
41 |
+
"full_name": "Ishita",
|
42 |
"permissions": ["read", "write", "edit_own"]
|
43 |
},
|
44 |
|
45 |
+
"jeeb": {
|
46 |
+
"password_hash": self._hash_password("jeeb@maptrees"),
|
47 |
"role": "researcher",
|
48 |
+
"full_name": "Jeeb",
|
49 |
"permissions": ["read", "write", "edit_own"]
|
50 |
}
|
51 |
}
|
static/login.html
CHANGED
@@ -272,21 +272,21 @@
|
|
272 |
<div class="demo-accounts">
|
273 |
<div class="demo-title">🔐 Available Accounts</div>
|
274 |
<div class="account-list">
|
275 |
-
<div class="account-item" onclick="fillCredentials('
|
276 |
-
<div class="account-role">
|
277 |
<div class="account-username">Full system access</div>
|
278 |
</div>
|
279 |
-
<div class="account-item" onclick="fillCredentials('
|
280 |
-
<div class="account-role">
|
281 |
-
<div class="account-username">
|
282 |
</div>
|
283 |
-
<div class="account-item" onclick="fillCredentials('
|
284 |
-
<div class="account-role">
|
285 |
-
<div class="account-username">
|
286 |
</div>
|
287 |
-
<div class="account-item" onclick="fillCredentials('
|
288 |
-
<div class="account-role">
|
289 |
-
<div class="account-username">
|
290 |
</div>
|
291 |
</div>
|
292 |
</div>
|
@@ -402,9 +402,9 @@
|
|
402 |
|
403 |
// Auto-fill demo credentials on page load for development
|
404 |
document.addEventListener('DOMContentLoaded', () => {
|
405 |
-
// Auto-select
|
406 |
setTimeout(() => {
|
407 |
-
fillCredentials('
|
408 |
}, 1000);
|
409 |
});
|
410 |
</script>
|
|
|
272 |
<div class="demo-accounts">
|
273 |
<div class="demo-title">🔐 Available Accounts</div>
|
274 |
<div class="account-list">
|
275 |
+
<div class="account-item" onclick="fillCredentials('aalekh', 'aalekh@maptrees')">
|
276 |
+
<div class="account-role">Aalekh (Admin)</div>
|
277 |
<div class="account-username">Full system access</div>
|
278 |
</div>
|
279 |
+
<div class="account-item" onclick="fillCredentials('admin', 'admin@maptrees')">
|
280 |
+
<div class="account-role">System Admin</div>
|
281 |
+
<div class="account-username">Administrative access</div>
|
282 |
</div>
|
283 |
+
<div class="account-item" onclick="fillCredentials('ishita', 'ishita@maptrees')">
|
284 |
+
<div class="account-role">Ishita</div>
|
285 |
+
<div class="account-username">Tree research & documentation</div>
|
286 |
</div>
|
287 |
+
<div class="account-item" onclick="fillCredentials('jeeb', 'jeeb@maptrees')">
|
288 |
+
<div class="account-role">Jeeb</div>
|
289 |
+
<div class="account-username">Tree research & documentation</div>
|
290 |
</div>
|
291 |
</div>
|
292 |
</div>
|
|
|
402 |
|
403 |
// Auto-fill demo credentials on page load for development
|
404 |
document.addEventListener('DOMContentLoaded', () => {
|
405 |
+
// Auto-select ishita account for easy testing
|
406 |
setTimeout(() => {
|
407 |
+
fillCredentials('ishita', 'ishita@maptrees');
|
408 |
}, 1000);
|
409 |
});
|
410 |
</script>
|