mirror of https://github.com/veypi/OneAuth.git
refactor(ui): Migrate router guard from env.js to routes.js
- Move beforeEnter router guard logic from env.js to routes.js export function
- Update $env references to $mod in env.js, ico.html, and layout/default.html
- Export routes as function that receives $mod context for dependency injection
- Remove router guard from env.js initialization module
master
parent
d987ac2fac
commit
6552ebf832
@ -1,63 +1,27 @@
|
|||||||
|
|
||||||
import VBase from './vbase.js'
|
import VBase from './vbase.js'
|
||||||
|
|
||||||
export default async ($env) => {
|
export default async ($mod) => {
|
||||||
// Load i18n
|
// Load i18n
|
||||||
try {
|
try {
|
||||||
const langs = await (await fetch($env.scoped + '/langs.json')).json()
|
const langs = await (await fetch($mod.scoped + '/langs.json')).json()
|
||||||
$env.$i18n.load(langs)
|
$mod.$i18n.load(langs)
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error('Failed to load langs.json', e)
|
console.error('Failed to load langs.json', e)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Initialize VBase Service
|
// Initialize VBase Service
|
||||||
const vbase = new VBase('vb', $env.scoped); // Relative path
|
const vbase = new VBase('vb', $mod.scoped); // Relative path
|
||||||
$env.$vbase = vbase;
|
$mod.$vbase = vbase;
|
||||||
|
|
||||||
// Wrap Axios: add auth header
|
// Wrap Axios: add auth header
|
||||||
vbase.wrapAxios($env.$axios);
|
vbase.wrapAxios($mod.$axios);
|
||||||
|
|
||||||
$env.$axios.interceptors.response.use(function(response) {
|
$mod.$axios.interceptors.response.use(function(response) {
|
||||||
return response?.data
|
return response?.data
|
||||||
}, function(error) {
|
}, function(error) {
|
||||||
let data = error.response ? error.response.data : error.response
|
let data = error.response ? error.response.data : error.response
|
||||||
return Promise.reject(data?.message || data);
|
return Promise.reject(data?.message || data);
|
||||||
});
|
});
|
||||||
|
|
||||||
// Router Guard
|
|
||||||
$env.$router.beforeEnter = async (to, from, next) => {
|
|
||||||
const isAuth = to.meta && to.meta.auth;
|
|
||||||
const roles = to.meta && to.meta.roles; // Array of required roles
|
|
||||||
|
|
||||||
if (isAuth) {
|
|
||||||
if (vbase.isExpired()) {
|
|
||||||
try {
|
|
||||||
await vbase.refresh();
|
|
||||||
} catch (e) {
|
|
||||||
vbase.logout('/login?redirect=' + encodeURIComponent(to.fullPath));
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!vbase.user) {
|
|
||||||
try {
|
|
||||||
await vbase.fetchUser();
|
|
||||||
} catch (e) {
|
|
||||||
vbase.logout('/login?redirect=' + encodeURIComponent(to.fullPath));
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Permission Check
|
|
||||||
if (to.meta.perm) {
|
|
||||||
if (!vbase.PermAdmin(to.meta.perm)) {
|
|
||||||
console.warn('Access denied: requires permission', to.meta.perm);
|
|
||||||
$env.$router.push('/403');
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
next();
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue