import { createSlice } from '@reduxjs/toolkit'; // ---------------------------------------------------- // Helper Function: กำหนดบทบาท (Role) จาก Django User Object // ---------------------------------------------------- const determineRole = (user) => { if (!user || !user.id) { return 'guest'; } // 1. ใช้ฟิลด์ 'role' ที่ส่งมาจาก Backend โดยตรง (ถ้ามี) if (user.role) { return user.role.toLowerCase(); // เช่น 'ADMIN' -> 'admin' } // 2. ใช้ฟิลด์ is_superuser/is_staff เป็น Fallback if (user.is_superuser) { return 'admin'; } if (user.is_staff) { return 'manager'; } // ผู้ใช้ทั่วไป return 'viewer'; }; // ---------------------------------------------------- // ฟังก์ชันช่วยในการอ่านค่าจาก Local Storage เพื่อกำหนดสถานะเริ่มต้น // ---------------------------------------------------- const getInitialAuthState = () => { const token = localStorage.getItem('token'); const user = JSON.parse(localStorage.getItem('user')); // ดึง Role const role = determineRole(user); return { isAuthenticated: !!token, user: user || null, role: role, }; }; const initialState = getInitialAuthState(); const authSlice = createSlice({ name: 'auth', initialState, reducers: { // Reducer สำหรับการล็อกอินสำเร็จ loginSuccess: (state, action) => { state.isAuthenticated = true; state.user = action.payload.user; state.role = action.payload.role; }, // Reducer สำหรับการออกจากระบบ logout: (state) => { state.isAuthenticated = false; state.user = null; state.role = 'guest'; // ลบข้อมูลจาก localStorage localStorage.removeItem('token'); localStorage.removeItem('user'); }, // Reducer สำหรับอัปเดตข้อมูลผู้ใช้ (เช่น หลังอัปเดตโปรไฟล์) updateUser: (state, action) => { state.user = action.payload.user; state.role = action.payload.role; // อัปเดต Role ด้วย (เผื่อมีการอัปเดตสิทธิ์) localStorage.setItem('user', JSON.stringify(action.payload.user)); localStorage.setItem('role', action.payload.role); } }, }); export const { loginSuccess, logout, updateUser } = authSlice.actions; export default authSlice.reducer;