66 lines
1.4 KiB
JavaScript
66 lines
1.4 KiB
JavaScript
// assets/js/utils/auth.js
|
|
const AuthUtils = {
|
|
getToken: () => localStorage.getItem("token"),
|
|
|
|
setToken: (token) => localStorage.setItem("token", token),
|
|
|
|
removeToken: () => localStorage.removeItem("token"),
|
|
|
|
getCurrentUser: () => {
|
|
const user = localStorage.getItem("user");
|
|
return user ? JSON.parse(user) : null;
|
|
},
|
|
|
|
setCurrentUser: (user) => {
|
|
localStorage.setItem("user", JSON.stringify(user));
|
|
},
|
|
|
|
removeCurrentUser: () => {
|
|
localStorage.removeItem("user");
|
|
},
|
|
|
|
clearAuth: () => {
|
|
localStorage.clear();
|
|
},
|
|
|
|
isAuthenticated: () => {
|
|
return !!AuthUtils.getToken();
|
|
},
|
|
|
|
hasRole: (role) => {
|
|
const user = AuthUtils.getCurrentUser();
|
|
return user && user.role === role;
|
|
},
|
|
|
|
redirectBasedOnRole: (user) => {
|
|
if (!user || !user.role) {
|
|
window.location.href = "/login";
|
|
return;
|
|
}
|
|
|
|
const redirectMap = {
|
|
admin: "/admin",
|
|
manager: "/manager",
|
|
user: "/user",
|
|
};
|
|
|
|
window.location.href = redirectMap[user.role] || "/login";
|
|
},
|
|
|
|
checkAuthAndRedirect: (requiredRole = null) => {
|
|
const user = AuthUtils.getCurrentUser();
|
|
|
|
if (!AuthUtils.isAuthenticated() || !user) {
|
|
window.location.href = "/login";
|
|
return false;
|
|
}
|
|
|
|
if (requiredRole && user.role !== requiredRole) {
|
|
AuthUtils.redirectBasedOnRole(user);
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
},
|
|
};
|