权限管理

本质上可以分为三类:

  • 功能权限(也是页面权限):决定用户可以访问哪些页面或功能模块
  • 按钮权限:决定用户在某个页面上可以使用哪些具体操作
  • 接口权限:一般与按钮权限配合使用,防止路由配置时忘记加权限

实现步骤

在登录的时候服务端返回一个权限树,它是一个树形结构。我们需要对这个树形结构进行解析,根据这个树形结构生成对应的动态路由表或动态路由数组,然后利用 Vue Router 的 addRoute 方法动态插入这些路由,然后就可以根据这个动态数据去显示左边的菜单。

对于按钮权限,权限树里面包含了指定页面下指定的按钮数据,可以使用隐藏或禁用元素的方式处理。对于接口权限,大多时候在服务端处理即可。

如何处理 Token?

正常情况下登录时,一般把密码进行加密,登录完成后服务端会返回一个 token,拿到 token 之后会做持久化缓存,下次请求时在请求头里携带 token 进行登录。如果 token 过期,在响应拦截中会先清除 token 然后再跳转到登录页。

如何实现单点登录?

  1. 如果主域名一样,可以基于 cookie 共享来实现
  2. 如果主域名不一样,则需要使用 SSO(推荐用 CAS)
  3. 如果需要接入第三方登录,使用 OAuth2.0

例如:xxx.baidu.com 其中 baidu.com 是主域名

如何对一个网页全局异常捕获?

// Vue 错误处理
app.config.errorHandler = (err, vm, info) => {
  console.error("Vue error caught: ", err, info);
  // 发送错误日志到服务器
};
 
// try-catch
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;
};
 
// 资源加载错误
window.addEventListener(
  "error",
  function (event) {
    console.error("Resource error caught: ", event);
    // 发送错误日志到服务器
    return true;
  },
  true
);