Skip to content

Commit ee7a866

Browse files
committed
👉 feat: implement user management functionality with admin access control and data fetching
1 parent 80e0818 commit ee7a866

File tree

3 files changed

+523
-346
lines changed

3 files changed

+523
-346
lines changed

‎src/client/controller/users.ts‎

Lines changed: 43 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,58 @@
11
import { NextFunction, Request, Response } from "express";
22
import { Controller } from "./controller.js";
3+
import { getDbClient } from "../../server/utils/db.js";
34

45
export class UsersController extends Controller {
56

67
public static async get(request: Request, response: Response, next: NextFunction) {
78
const currentPath = request.path;
89

910
try {
11+
const user = (request as any).user;
12+
if (!user || user.role !== "admin") {
13+
const usersData = {
14+
...Controller.defaultConfig,
15+
title: `Users Management - ${Controller.defaultConfig.title}`,
16+
page: "users",
17+
currentPath,
18+
users: [],
19+
usersError: "Admin access required."
20+
};
21+
22+
response.status(403).render("layouts/main", usersData);
23+
return;
24+
}
25+
26+
const sql = getDbClient();
27+
const usersResult = await sql`
28+
SELECT
29+
id, username, email, name, avatar, role,
30+
is_active, last_login_at, created_at, updated_at
31+
FROM users
32+
ORDER BY created_at DESC
33+
`;
34+
35+
const users = usersResult.map((userRow: any) => ({
36+
id: userRow.id,
37+
username: userRow.username,
38+
email: userRow.email,
39+
name: userRow.name,
40+
avatar: userRow.avatar,
41+
role: userRow.role,
42+
is_active: userRow.is_active,
43+
last_login_at: userRow.last_login_at,
44+
created_at: userRow.created_at,
45+
updated_at: userRow.updated_at
46+
}));
47+
1048
// Render users page
1149
const usersData = {
1250
...Controller.defaultConfig,
1351
title: `Users Management - ${Controller.defaultConfig.title}`,
1452
page: 'users',
15-
currentPath
53+
currentPath,
54+
users,
55+
usersError: ""
1656
};
1757

1858
response.render('layouts/main', usersData);
@@ -25,7 +65,8 @@ export class UsersController extends Controller {
2565
title: `Users Management - ${Controller.defaultConfig.title}`,
2666
page: 'users',
2767
currentPath,
28-
error: 'Failed to load users page'
68+
users: [],
69+
usersError: 'Failed to load users page'
2970
};
3071

3172
response.render('layouts/main', usersData);

0 commit comments

Comments
 (0)