@nitra/vite-boot
Version:
90 lines (78 loc) • 2.4 kB
JavaScript
import { getToken, checkToken } from './token.js'
import { user, setUser } from './user.js'
export let router
/**
*
* @param r
*/
export function setRouter(r) {
router = r
}
/**
*
* @param to
*/
export function canUserAccess(to) {
// Якщо сторінка без обмеження по ролям то дозволяємо завжди
if (to.meta?.layout === 404 || to.meta?.layout === 'blank') {
return true
}
// Якщо є обмеження на сторінці по ролям
const token = getToken()
if (!token) {
// Записуємо поточний урл в session storage
// щоб потім на нього повернути після логіну
sessionStorage.setItem('url-before-logout', to.path)
return false
}
// Якщо перший раз запускаємо - завантажуємо користувача
if (!user.role) {
const check = checkToken(token)
if (check.result === 'ok') {
setUser(check.decoded)
} else {
return false
}
}
// Якщо на сторінці не вказано обмеження по ролі
if (!to.meta?.roles) {
return true
}
// Якщо вказано - чи входить в дозволені користувачу
if (to.meta?.roles.includes(user.role)) {
return true
}
return false
}
/**
*
* @param to
*/
export function canUserAccessMetaRoles(to) {
// Якщо сторінка без обмеження по ролям то дозволяємо завжди
if (to.meta?.layout === 404 || to.meta?.layout === 'blank' || !to.meta?.roles) {
return true
}
// Якщо є обмеження на сторінці по ролям
const token = getToken()
// Якщо токен є, то можна любі сторінки
if (!token) {
return false
}
// Якщо перший раз запускаємо - завантажуємо користувача
if (!user.role) {
const check = checkToken(token)
if (check.result === 'ok') {
setUser(check.decoded)
} else {
return false
}
}
// Якщо токена немає, та є обмеження на сторінці
// то забороняємо доступ
// if (to.meta?.roles.length > 0) {
// return false
// }
// Не пройшло обмеження по ролям
return true
}