elearning/Frontend-Learner/middleware/auth.ts

32 lines
1.7 KiB
TypeScript
Raw Permalink Normal View History

// Middleware สำหรับตรวจสอบสิทธิ์การเข้าถึงหน้าเว็บ (Authentication Guard)
2026-01-13 10:46:40 +07:00
export default defineNuxtRouteMiddleware((to) => {
2026-01-14 15:15:31 +07:00
const { isAuthenticated, user } = useAuth()
2026-01-13 10:46:40 +07:00
// รายชื่อหน้าสำหรับ Guest (ห้าม User ที่ Login แล้วเข้า)
// เช่น หน้า Login, Register
2026-01-13 10:46:40 +07:00
const authPages = [
'/auth/login',
'/auth/register',
'/auth/forgot-password',
'/auth/reset-password'
]
// รายชื่อหน้าที่เข้าถึงได้โดยไม่ต้อง Login (Public Pages)
2026-01-13 10:46:40 +07:00
const publicPages = ['/', '/courses', '/browse', '/browse/discovery']
// กรณีที่ 1: ผู้ใช้ Login แล้ว แต่พยายามเข้าหน้า Login/Register
// ระบบจะดีดกลับไปหน้า Dashboard ตาม Role ของผู้ใช้
2026-01-13 10:46:40 +07:00
if (isAuthenticated.value && authPages.includes(to.path)) {
2026-01-14 15:15:31 +07:00
const role = user.value?.role?.code
if (role === 'ADMIN') return navigateTo('/admin', { replace: true })
if (role === 'INSTRUCTOR') return navigateTo('/instructor', { replace: true })
2026-01-13 10:46:40 +07:00
return navigateTo('/dashboard', { replace: true })
}
// กรณีที่ 2: ผู้ใช้ยังไม่ Login แต่พยายามเข้าหน้าที่ต้อง Login (Protected Pages)
// (หน้าอื่น ๆ ที่ไม่ได้อยู่ใน publicPages และ authPages)
2026-01-13 10:46:40 +07:00
if (!isAuthenticated.value && !authPages.includes(to.path) && !publicPages.includes(to.path)) {
return navigateTo('/auth/login', { replace: true })
}
})