Skip to content

Commit 8d0cf19

Browse files
managers now have separate interface, role is checked on login
1 parent 1dfe869 commit 8d0cf19

File tree

6 files changed

+50
-6
lines changed

6 files changed

+50
-6
lines changed

client/src/hooks/me.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,21 @@ import { useQuery } from "@tanstack/react-query";
22

33
import api from "@/lib/api";
44

5+
export interface Profile {
6+
id: number;
7+
user: number;
8+
profile_info: string;
9+
role: string;
10+
}
11+
512
export interface User {
613
id: number;
714
username: string;
815
first_name: string;
916
last_name: string;
1017
email: string;
1118
is_staff: boolean;
19+
profile: Profile;
1220
}
1321

1422
export const useMe = () =>

client/src/pages/home.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ export default function Home() {
2626
{me && (
2727
<div>
2828
<p>
29-
Hello {me.first_name} ({me.username})
29+
Hello {me.first_name} ({me.username} {me.profile.role})
3030
</p>
3131
<Button onClick={logout}>Logout</Button>
3232
</div>

client/src/pages/login.tsx

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,23 @@ export default function Login() {
2727
username,
2828
password,
2929
});
30-
3130
const { access, refresh } = res.data;
3231
setTokens(access, refresh);
3332

34-
router.push("/home");
33+
// once logged in, get user role and redirect to appropriate page
34+
const userResponse = await api.get("/user/me/");
35+
const userRole = userResponse.data.profile.role;
36+
37+
switch (userRole) {
38+
case "manager":
39+
router.push("manager/dashboard");
40+
break;
41+
case "user":
42+
router.push("/home");
43+
break;
44+
default:
45+
router.push("/home");
46+
}
3547
};
3648

3749
return (
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
export default function ManagerDashboard() {
2+
return (
3+
<div>
4+
<h1>Manager Dashboard</h1>
5+
</div>
6+
);
7+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Generated by Django 5.2.8 on 2026-01-02 07:56
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('user', '0001_initial'),
10+
]
11+
12+
operations = [
13+
migrations.AlterField(
14+
model_name='profile',
15+
name='role',
16+
field=models.CharField(choices=[('user', 'User'), ('admin', 'Admin'), ('manager', 'Manager')], default='user', max_length=20),
17+
),
18+
]

server/user/models.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,8 @@ class Profile(models.Model):
1111
user = models.OneToOneField(User, on_delete=models.CASCADE)
1212
profile_info = models.TextField(blank=True) # Or keep it as 'bio'?
1313

14-
ROLE_CHOICES = ('user','User'), ('admin','Admin')
15-
role = models.CharField(max_length=20, default='user', choices=ROLE_CHOICES) # Or we can use BooleanField is_manager:
16-
#is_manager = models.BooleanField(default=False)
14+
ROLE_CHOICES = ('user','User'), ('admin','Admin'), ('manager','Manager')
15+
role = models.CharField(max_length=20, default='user', choices=ROLE_CHOICES)
1716
def __str__(self):
1817
return f"Profile: {self.user.username}"
1918

0 commit comments

Comments
 (0)