用Vue2.5和Elemnt-ui2搭建一个后台模版:提高篇(2 登录、权限)

526 阅读2分钟

权限控制

系统权限控制流程

1. 登录、请求拦截 1.1 在路由跳转前(router.beforeEach)的钩子中,获取LocalStorage是否有token值,如果没有直接跳转登录页,如果有将跳转到home页面,

router.beforeEach((to, from, next) => {
  NProgress.start()            // 开启Progress
  if (localStorage.getItem('Authorization')) {
    /**
    在路由跳转前判断,store内是否有用户信息,
    如果store内没有用户信息,在这里发请求,
    并且拉取用户信息,存如store内,
    这样将保证,每次刷新页面会拿到最新的用户信息
  */
  } else {
    next('/login')
  }
})

1.2 用户根据帐号密码进行系统登录,登录成功后后端返回一个tkoen,把token存在本地LocalStorage中。

1.3 axios拦截器中,每次从本地LocalStorage取到之前存的token值,在每次请求发出之前添加到header的Authorization属性中。

// request 请求发送之前 拦截器
service.interceptors.request.use(config => {
  const Authorization = getLocalStorage('Authorization')
  if (Authorization) {
    config.headers.Authorization = Authorization  // 让每个请求携带token--['Authorization']
  }
  return config
}, error => {
  // Do something with request error
  console.log(error)
  Promise.reject(error)
})

1.2 axios拦截器中,每次请求收到后,根据之前的接口约定,进行拦截处理

// request 请求收到后 拦截器设置
service.interceptors.response.use(
  response => {
    if (response) {
      switch (response.data.code) {
        case 'H0000':
          break
        case 'B1000':                                  // 返回 B1000 清除token信息并跳转到登录页面
          sessionStorage.setItem('session_key', null)  // 将token清空
          store.dispatch('LogOut').then(() => {
            location.reload() // 刷新页面
          })
          break
        default:
          Message.error(response.data.data.msg ? response.data.data.msg : '返回状态非H0000')
      }
      return response.data
    } else {
      Message.error('响应成功,但是响应信息不存在!')
    }
  },
  error => {
    if (error.response) {
      switch (error.response.status) {
        case 401:
      }
    }
    Message.error(ENV === 'development' ? '服务器端产生错误!' : '网络因素,请稍后重试!')
    return Promise.reject(error.response.data)   // 返回接口返回的错误信息
  })

作为一个后台管理系统,权限控制是永远都不能逃避的话题,可能简单的系统,权限控制分管理员、超级管理员,普通用户等几个固定权限。但是由于我司业务繁琐,有20-30个不同岗位的人使用系统,每个人的权限都会通过后台配置,比如每个操作按钮,有一个编号,用户登录后,后台会返回当前用户拥有的所有权限的一个编码数组,从而前端根据数组来进行权限控制。当前简易模版中,没有提供相关代码,所以权限控制您需要结合您公司业务,进行编写。