国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

Vue 權(quán)限控制的兩種方法(路由驗證)

2024-05-06 15:35:49
字體:
供稿:網(wǎng)友

下面介紹兩種權(quán)限控制的方法:

路由元信息(meta) 動態(tài)加載菜單和路由(addRoutes)

路由元信息(meta)

如果一個網(wǎng)站有不同的角色,比如 管理員 和 普通用戶 ,要求不同的角色能訪問的頁面是不一樣的

這個時候我們就可以 把所有的頁面都放在路由表里 ,只要 在訪問的時候判斷一下角色權(quán)限 。如果有權(quán)限就讓訪問,沒有權(quán)限的話就拒絕訪問,跳轉(zhuǎn)到404頁面

vue-router 在構(gòu)建路由時提供了元信息 meta 配置接口,我們可以在元信息中添加路由對應(yīng)的權(quán)限,然后在路由守衛(wèi)中檢查相關(guān)權(quán)限,控制其路由跳轉(zhuǎn)。

可以在每一個路由的 meta 屬性里,將能訪問該路由的角色添加到 roles 里。用戶每次登陸后,將用戶的角色返回。然后在訪問頁面時,把路由的 meta 屬性和用戶的角色進行對比,如果用戶的角色在路由的 roles 里,那就是能訪問,如果不在就拒絕訪問。

代碼示例1:

路由信息:

routes: [  {    path: '/login',    name: 'login',    meta: {      roles: ['admin', 'user']    },    component: () => import('../components/Login.vue')  },  {    path: 'home',    name: 'home',    meta: {      roles: ['admin']    },    component: () => import('../views/Home.vue')  },]

頁面控制:

//假設(shè)有兩種角色:admin 和 user //從后臺獲取的用戶角色const role = 'user'//當(dāng)進入一個頁面是會觸發(fā)導(dǎo)航守衛(wèi) router.beforeEach 事件router.beforeEach((to,from,next)=>{ if(to.meta.roles.includes(role)){ next() //放行 }esle{ next({path:"/404"}) //跳到404頁面 }})

代碼示例2

當(dāng)然也可以用下面的一種方法:

// router.js// 路由表元信息[ {  path: '',  redirect: '/home' }, {  path: '/home',  meta: {   title: 'Home',   icon: 'home'  } }, {  path: '/userCenter',  meta: {   title: '個人中心',   requireAuth: true // 在需要登錄的路由的meta中添加響應(yīng)的權(quán)限標(biāo)識  } }]// 在守衛(wèi)中訪問元信息function gaurd (to, from, next) { // to.matched.some(record => record.meta.requireAuth) // 可在此處}

可以在多個路由下面添加這個權(quán)限標(biāo)識,達到控制的目的

只要一切換頁面,就需要看有沒有這個權(quán)限,所以可以在最大的路由下 main.js 中配置

存儲信息

一般的,用戶登錄后會在本地存儲用戶的認證信息,可以用 token 、 cookie 等,這里我們用 token 。

將用戶的 token 保存到 localStorage 里,而用戶信息則存在內(nèi)存 store 中。這樣可以在 vuex 中存儲一個標(biāo)記用戶登錄狀態(tài)的屬性 auth ,方便權(quán)限控制。

代碼示例

// store.js{ state: {  token: window.localStorage.getItem('token'),  auth: false,  userInfo: {} }, mutations: {  setToken (state, token) {   state.token = token   window.localStorage.setItem('token', token)  },  clearToken (state) {   state.token = ''   window.localStorage.setItem('token', '')  },  setUserInfo (state, userInfo) {   state.userInfo = userInfo   state.auth = true // 獲取到用戶信息的同時將auth標(biāo)記為true,當(dāng)然也可以直接判斷userInfo  } }, actions: {  async getUserInfo (ctx, token) {   return fetchUserInfo(token).then(response => {    if (response.code === 200) {     ctx.commit('setUserInfo', response.data)    }    return response   })  },  async login (ctx, account) {   return login(account).then(response => {    if (response.code === 200) {     ctx.commit('setUserInfo', response.data.userInfo)     ctx.commit('setToken', response.data.token)    }   })  } }}            
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 嵊州市| 财经| 右玉县| 雅江县| 闽侯县| 静宁县| 缙云县| 依安县| 循化| 江孜县| 马山县| 普陀区| 金沙县| 湟中县| 康马县| 屯昌县| 嵩明县| 长阳| 九寨沟县| 仙居县| 赤城县| 高雄市| 兴文县| 垦利县| 鹤山市| 海兴县| 张家川| 安仁县| 福鼎市| 囊谦县| 于都县| 当雄县| 南皮县| 读书| 西贡区| 依安县| 呈贡县| 武清区| 长顺县| 彩票| 偏关县|