UNPKG

@nitra/vite-boot

Version:
94 lines (82 loc) 3.25 kB
import { checkToken, getToken } from './token.js' import { setUser, user } from './user.js' export let router /** * Зберігає інстанс роутера для подальшого використання * @param {import('vue-router').Router} r - Інстанс роутера */ export function setRouter(r) { router = r } /** * Перевіряє доступ користувача до маршруту * @param {import('vue-router').RouteLocationNormalized} to - Маршрут призначення * @returns {boolean} - Чи дозволено доступ */ export function canUserAccess(to) { // Якщо сторінка без обмеження по ролям то дозволяємо завжди if (to.meta?.layout === 404 || to.meta?.layout === 'blank') { return true } // Якщо є обмеження на сторінці по ролям const token = getToken() if (!token) { // Записуємо поточний урл в session storage // щоб потім на нього повернути після логіну // прибрати у рядку слеш, якщо він є першим символом const url = `${import.meta.env.BASE_URL}${to.path.startsWith('/') ? to.path.slice(1) : to.path}` sessionStorage.setItem('url-before-logout', url) return false } // Якщо перший раз запускаємо - завантажуємо користувача if (!user.role) { const check = checkToken(token) if (check.result === 'ok') { setUser(check.decoded, token) } else { return false } } // Якщо на сторінці не вказано обмеження по ролі if (!to.meta?.roles) { return true } // Якщо вказано - чи входить в дозволені користувачу if (to.meta?.roles.includes(user.role)) { return true } return false } /** * Перевіряє доступ за наявності ролей у метаданих маршруту * @param {import('vue-router').RouteLocationNormalized} to - Маршрут призначення * @returns {boolean} - Чи дозволено доступ */ 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, token) } else { return false } } // Якщо токена немає, та є обмеження на сторінці // то забороняємо доступ // if (to.meta?.roles.length > 0) { // return false // } // Не пройшло обмеження по ролям return true }