DONE: layout letter with letterhead and footer, notification for newly...
This commit is contained in:
+35
-14
@@ -1,11 +1,16 @@
|
||||
import { createRouter, createWebHistory } from 'vue-router'
|
||||
import Layout from '@/themes'
|
||||
import DocsLayout from '@/docs/DocsLayout.vue'
|
||||
import { hasAnyActiveRolePermission } from '@/core/utils/activeRolePermission'
|
||||
import { getRouteRequiredPermissions } from '@/core/utils/routePermission'
|
||||
import { authPublicRoutes, resolvePostAuthRoute } from '@/modules/auth'
|
||||
import { membershipApplicationPublicRoutes, membershipApplicationLayoutRoutes } from '@/modules/membership-application'
|
||||
import { profileLayoutRoutes } from '@/modules/profile'
|
||||
import { pinia } from '@/pinia'
|
||||
import { useAuthStore } from '@/stores/auth'
|
||||
import { userLayoutRoutes } from '@/modules/user'
|
||||
import { roleLayoutRoutes } from '@/modules/role'
|
||||
import { activityLayoutRoutes } from '@/modules/activity'
|
||||
|
||||
const router = createRouter({
|
||||
history: createWebHistory(import.meta.env.BASE_URL),
|
||||
@@ -182,6 +187,9 @@ const router = createRouter({
|
||||
},
|
||||
...profileLayoutRoutes,
|
||||
...userLayoutRoutes,
|
||||
...roleLayoutRoutes,
|
||||
...activityLayoutRoutes,
|
||||
...membershipApplicationLayoutRoutes,
|
||||
// Docs Layout
|
||||
{
|
||||
path: '/',
|
||||
@@ -243,11 +251,6 @@ const router = createRouter({
|
||||
name: "combobox",
|
||||
component: () => import("../docs/pages/combobox.vue"),
|
||||
},
|
||||
{
|
||||
path: "data-table",
|
||||
name: "data-table",
|
||||
component: () => import("../docs/pages/data-table.vue"),
|
||||
},
|
||||
{
|
||||
path: "datepicker",
|
||||
name: "datepicker",
|
||||
@@ -278,11 +281,6 @@ const router = createRouter({
|
||||
name: "menu",
|
||||
component: () => import("../docs/pages/menu.vue"),
|
||||
},
|
||||
{
|
||||
path: "native-select",
|
||||
name: "native-select",
|
||||
component: () => import("../docs/pages/native-select.vue"),
|
||||
},
|
||||
{
|
||||
path: "pagination",
|
||||
name: "pagination",
|
||||
@@ -368,15 +366,21 @@ const router = createRouter({
|
||||
],
|
||||
},
|
||||
...authPublicRoutes,
|
||||
...membershipApplicationPublicRoutes,
|
||||
{
|
||||
path: '/error-page',
|
||||
name: 'error-page',
|
||||
component: () => import('../views/ErrorPage.vue'),
|
||||
},
|
||||
{
|
||||
path: '/forbidden',
|
||||
name: 'forbidden',
|
||||
component: () => import('../views/ForbiddenPage.vue'),
|
||||
},
|
||||
],
|
||||
})
|
||||
|
||||
const PUBLIC_ROUTE_NAMES = new Set(['login', 'register', 'verify-email'])
|
||||
const PUBLIC_ROUTE_NAMES = new Set(['login', 'register', 'verify-email', 'membership-application-apply'])
|
||||
|
||||
router.beforeEach(async (to) => {
|
||||
const authStore = useAuthStore(pinia)
|
||||
@@ -405,12 +409,16 @@ router.beforeEach(async (to) => {
|
||||
}
|
||||
|
||||
// Redirect authenticated users away from login/register/verify-email.
|
||||
if (PUBLIC_ROUTE_NAMES.has(routeName) && authStore.isAuthenticated) {
|
||||
if (
|
||||
authStore.isAuthenticated &&
|
||||
PUBLIC_ROUTE_NAMES.has(routeName) &&
|
||||
routeName !== 'membership-application-apply'
|
||||
) {
|
||||
return resolvePostAuthRoute(authStore.user)
|
||||
}
|
||||
|
||||
// Other auth pages (privacy, terms, etc.).
|
||||
if (to.meta?.module === 'auth' || PUBLIC_ROUTE_NAMES.has(routeName)) {
|
||||
// Public routes (auth pages, membership application, privacy, terms, etc.).
|
||||
if (to.meta?.public === true || to.meta?.module === 'auth' || PUBLIC_ROUTE_NAMES.has(routeName)) {
|
||||
return true
|
||||
}
|
||||
|
||||
@@ -430,6 +438,19 @@ router.beforeEach(async (to) => {
|
||||
return { name: 'account-pending' }
|
||||
}
|
||||
|
||||
const requiredPermissions = getRouteRequiredPermissions(to)
|
||||
|
||||
if (
|
||||
requiredPermissions.length &&
|
||||
!hasAnyActiveRolePermission(
|
||||
authStore.user,
|
||||
authStore.activeRole,
|
||||
requiredPermissions,
|
||||
)
|
||||
) {
|
||||
return { name: 'forbidden' }
|
||||
}
|
||||
|
||||
return true
|
||||
})
|
||||
|
||||
|
||||
Reference in New Issue
Block a user