diff --git a/package.json b/package.json index a63c0e8..4c403fe 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,7 @@ }, "dependencies": { "@popperjs/core": "2.11.5", + "axios": "^1.6.8", "bootstrap": "5.1.3", "pinia": "2.0.14", "prismjs": "1.28.0", diff --git a/src/App.vue b/src/App.vue index ab0ef2b..0eb8622 100644 --- a/src/App.vue +++ b/src/App.vue @@ -1,18 +1,5 @@ diff --git a/src/router/constants.js b/src/router/constants.js new file mode 100644 index 0000000..cee1edb --- /dev/null +++ b/src/router/constants.js @@ -0,0 +1,5 @@ +export const Role = { + Admin: 'admin', + User: 'user', + Guest: 'guest', + }; \ No newline at end of file diff --git a/src/router/index.js b/src/router/index.js index 6257f01..fd49152 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -23,6 +23,19 @@ import ElDropdowns from "../layouts/sections/elements/dropdowns/DropdownsView.vu import ElProgressBars from "../layouts/sections/elements/progress-bars/ProgressBarsView.vue"; import ElToggles from "../layouts/sections/elements/toggles/TogglesView.vue"; import ElTypography from "../layouts/sections/elements/typography/TypographyView.vue"; + + import AdminLoginView from "../views/Auth/AdminLogin.vue"; + import UserLoginView from "../views/Auth/UserLogin.vue"; + import AdminDashboardView from "../views/Admin/dashboard.vue"; + import AdminSettingsView from "../views/Admin/Settings.vue" + import AdminUsersView from "../views/Admin/Users.vue" + +// import AdminView from "../views/LandingPages/Author/AuthorView.vue"; +import { Role } from './constants'; +import { useStore } from '@/stores' + + + const router = createRouter({ history: createWebHistory(import.meta.env.BASE_URL), routes: [ @@ -30,6 +43,7 @@ const router = createRouter({ path: "/", name: "presentation", component: PresentationView, + //meta: { requiresAuth: true, requiredRole: Role.Admin }, }, { path: "/pages/landing-pages/about-us", @@ -146,7 +160,100 @@ const router = createRouter({ name: "el-typography", component: ElTypography, }, - ], -}); + + { + path: '/admin/auth', + component: AdminLoginView, + name: "admin-login", + }, + { + path: '/admin/dashboard', + component: AdminDashboardView, + name: "admin-dashboard", -export default router; + children: [ + { + path: '/admin/users', + component: AdminUsersView, + name: "admin-users", + }, + { + path: '/admin/settings', + component: AdminSettingsView, + name: "admin-settings", + }, + // Other child routes for the dashboard + ] + + }, + // { + // path: "/unauthorized", + // name: "unauthorized", + // component: UnauthorizedView, + // }, + { + path: "/user/login", + name: "user-login", + component: UserLoginView, + }, + + + ], + }); + + + router.beforeEach((to, from, next) => { + const store = useStore() + console.log(store.isAuthenticated,store.user,"store") + //console.log(store.isAuthenticated,"store") + if (to.meta.requiresAuth && !store.isAuthenticated) { + next('/admin/auth') + } else if (to.meta.requiresVisitor && store.isAuthenticated) { + next('/sections/elements/progress-bars') + } else { + next() + } + }) + + + + // function isAuthenticated() { + // // Check if the user is authenticated, e.g., by verifying the presence of a valid token or logged-in state + // // Return true if authenticated, false otherwise + // // Example: return localStorage.getItem('token') !== null; + + // return true; + // } + + // function getCurrentUserRole() { + // // Retrieve the current user's role from your authentication system or state management + // // Return the role of the current user + // // Example: return localStorage.getItem('userRole'); + // return "guest"; + // } + + // // Route guard + // router.beforeEach((to, from, next) => { + // if (to.meta.requiresAuth) { + // // Check if the user is authenticated, e.g., by checking the presence of a valid token or logged-in state + // if (isAuthenticated()) { + // // Check if the user has the required role + // if (to.meta.requiredRole && getCurrentUserRole() !== to.meta.requiredRole) { + // // Redirect to a different route or show an error message + // next({ path: '/unauthorized' }); + // } else { + // // Proceed to the requested route + // next(); + // } + // } else { + // // Redirect to the login page or a suitable route for unauthenticated users + // next({ path: '/logout' }); + // } + // } else { + // // No authentication required for the route + // next(); + // } + // }); + + export default router; + \ No newline at end of file diff --git a/src/stores/index.js b/src/stores/index.js index e266a41..a15b9ce 100644 --- a/src/stores/index.js +++ b/src/stores/index.js @@ -1,7 +1,27 @@ import { defineStore } from "pinia"; import bootstrap from "bootstrap/dist/js/bootstrap.min.js"; + export const useAppStore = defineStore("storeId", { state: () => ({ bootstrap, }), }); + + +export const useStore = defineStore({ + id: 'main', + state: () => ({ + isAuthenticated: false, + user: null, + }), + actions: { + login(user) { + this.isAuthenticated = true + this.user = user + }, + logout() { + this.isAuthenticated = false + this.user = null + }, + }, +}) \ No newline at end of file diff --git a/src/views/Admin/Settings.vue b/src/views/Admin/Settings.vue new file mode 100644 index 0000000..cfe3491 --- /dev/null +++ b/src/views/Admin/Settings.vue @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/src/views/Admin/SideNavAdmin.vue b/src/views/Admin/SideNavAdmin.vue new file mode 100644 index 0000000..9d70a9d --- /dev/null +++ b/src/views/Admin/SideNavAdmin.vue @@ -0,0 +1,44 @@ + + + + diff --git a/src/views/Admin/Users.vue b/src/views/Admin/Users.vue new file mode 100644 index 0000000..5702ac4 --- /dev/null +++ b/src/views/Admin/Users.vue @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/src/views/Admin/dashboard.vue b/src/views/Admin/dashboard.vue new file mode 100644 index 0000000..5f42597 --- /dev/null +++ b/src/views/Admin/dashboard.vue @@ -0,0 +1,97 @@ + + + + + \ No newline at end of file diff --git a/src/views/Auth/AdminLogin.vue b/src/views/Auth/AdminLogin.vue new file mode 100644 index 0000000..5a5c4e0 --- /dev/null +++ b/src/views/Auth/AdminLogin.vue @@ -0,0 +1,128 @@ + + + diff --git a/src/views/Auth/UserLogin.vue b/src/views/Auth/UserLogin.vue new file mode 100644 index 0000000..868347b --- /dev/null +++ b/src/views/Auth/UserLogin.vue @@ -0,0 +1,171 @@ + +