UNPKG

@nitra/vite-boot

Version:
90 lines (78 loc) 2.4 kB
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 }