面试题答案
一键面试实现思路
- 在Svelte路由系统中,可以利用路由的相关钩子函数来实现导航守卫。
- 当路由即将导航到某个路径时,特别是
/admin
路径,调用checkAdminPermission()
函数检查权限。 - 根据检查结果决定是否允许导航,若没有权限则重定向到
/login
。
关键代码片段
假设使用 svelte - routing
库:
<script>
import { Router, Route, navigate } from'svelte - routing';
function checkAdminPermission() {
// 这里模拟权限检查逻辑,实际应用中应与后端交互验证
return true; // 或者返回实际的权限检查结果
}
const beforeNavigate = (to, from) => {
if (to.path === '/admin') {
if (!checkAdminPermission()) {
navigate('/login');
return false;
}
}
return true;
};
</script>
<Router beforeNavigate={beforeNavigate}>
<Route path="/admin">
<!-- 管理员页面内容 -->
</Route>
<Route path="/login">
<!-- 登录页面内容 -->
</Route>
</Router>
在上述代码中:
beforeNavigate
函数作为Router
组件的beforeNavigate
属性传入,它会在每次路由导航前被调用。- 在
beforeNavigate
函数内部,当检测到目标路由是/admin
且用户没有管理员权限时,调用navigate('/login')
进行重定向,并返回false
阻止导航到/admin
。如果有权限或不是导航到/admin
,则返回true
允许正常导航。