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.
96 lines
2.9 KiB
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)
|
|
}
|