功能
权限管理
本质上可以分为三类:
- 第一类就是功能权限(其实也是页面权限):决定用户可以访问哪些页面或功能模块
- 第二类就是按钮权限:决定用户在某个页面上可以使用哪些具体操作
- 第三类就是接口权限:一般与按钮权限配合使用,有可能路由配置的时候按钮忘记加权限
步骤如下: 在登录的时候服务端返回一个权限数,它是一个树形结构进行呈现的,我们需要对这个树形结构进行解析,根据这个树形结构会生成对应的动态路由表或者说动态的路由数组,然后利用 Vue Router 的 addRoute 方法动态插入这些路由,然后就可以根据这个动态数据去显示左边的菜单,这就是所谓的页面权限。对于按钮权限,权限数里面就包含了指定页面下指定的按钮数据,那么这样的话我们无论使用隐藏还是禁用元素其实都可以。最后一个接口权限,这个东西大多时候在服务端去处理就可以了
如何处理 token
正常情况下我们去登录的时候,一般把密码进行加密,登录完成之后,然后给服务端,服务端一般会给我们一个对应的 token,拿到 token 之后一般会去做一个持久化缓存形式,再下次请求的时候在请求头里携带 token 进行登录,如果 token 过期的话,在响应拦截中会先清除 token 然后再跳转到登录页
如何实现单点登录
- 如果主域名一样,可以基于 cookie 共享来实现
- 如果主域名不一样,则需要使用 SSO(推荐用 CAS)
- 如果需要接入第三方登录,使用 0Auth2.0
e.g. xxx.baidu.com 其中baidu.com是主域名
对一个网页全局异常捕获怎么做?
javascript
app.config.errorHandler = (err, vm, info) => {
console.error("Vue error caught: ", err, info);
// 你可以在这里发送错误日志到服务器
};
try {
// 关键代码段
} catch (error) {
console.error("Caught in try-catch: ", error);
// 你可以在这里发送错误日志到服务器
}
window.onerror = function (message, source, lineno, colno, error) {
console.error("Global error caught: ", message, source, lineno, colno, error);
// 你可以在这里发送错误日志到服务器
return false; // 返回 true 阻止浏览器默认的错误处理(显示错误消息)。
};
window.addEventListener(
"error",
function (event) {
console.error("Resource error caught: ", event);
// 你可以在这里发送错误日志到服务器
return true; // 返回 true 阻止浏览器默认的错误处理(显示错误消息)。
},
true
);