You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ngcp-csc-ui/src/boot/routes.js

96 lines
2.9 KiB

import { Dark } from 'quasar'
import {
getJwt, getSubscriberId,
hasJwt
} from 'src/auth'
export default ({ app, router, store }) => {
router.beforeEach((to, from, next) => {
const publicUrls = ['/login', '/recoverpassword', '/changepassword']
// not authorized user
if (!hasJwt()) {
if (!publicUrls.includes(to.path)) {
next({
path: '/login'
})
} else {
next()
}
} else {
// already authorized user
switch (to.path) {
case '/login':
next({
path: '/'
})
break
case '/conference':
next({
path: '/conference/room123'
})
break
default: {
// 1. Admin check
if (to.meta?.adminOnly && !store.getters['user/isAdmin']) {
return next('/')
}
// 2. Profile attribute check
if (to.meta?.profileAttribute &&
!store.getters['user/hasSubscriberProfileAttribute'](to.meta.profileAttribute)) {
return next('/')
}
// 3. Profile attributes array check
if (to.meta?.profileAttributes &&
!store.getters['user/hasSomeSubscriberProfileAttributes'](to.meta.profileAttributes)) {
return next('/')
}
// 4. License check
if (to.meta?.license) {
const isSpCe = store.getters['user/isSpCe']
// CE-specific check
if (isSpCe && !to.meta.allowCE) {
return next('/')
}
// License check for non-CE users
if (!isSpCe && !store.getters['user/hasLicenses']([to.meta.licenses])) {
return next('/')
}
}
// 5. Platform Feature check
if (to.meta?.platformFeature &&
!store.getters['user/hasPlatformFeature'](to.meta.platformFeature)) {
return next('/')
}
// 6. Capability check
if (to.meta?.capability &&
!store.getters['user/hasCapability'](to.meta.capability)) {
return next('/')
}
// All checks passed, route is accessible
next()
}
}
}
})
router.afterEach((to, from) => {
store.commit('routeChanged', to)
})
if (hasJwt()) {
store.commit('user/loginSucceeded', {
jwt: getJwt(),
subscriberId: getSubscriberId()
})
}
Dark.set(true)
}