<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        基于vue實現網站前臺的權限管理(前后端分離實踐)

        來源:懂視網 責編:小采 時間:2020-11-27 22:21:25
        文檔

        基于vue實現網站前臺的權限管理(前后端分離實踐)

        基于vue實現網站前臺的權限管理(前后端分離實踐):Javascript做為當下的熱門語言,用途很廣泛,從前端到后端處處可見其存在,該技術如今在我們項目內部也大量使用來開發諸如CMS系統以及其他其他一些數據分析系統的前端頁面,為此個人非常感興趣并將其作為帽子卡的擴展內容來進行課余學習。 Javascript
        推薦度:
        導讀基于vue實現網站前臺的權限管理(前后端分離實踐):Javascript做為當下的熱門語言,用途很廣泛,從前端到后端處處可見其存在,該技術如今在我們項目內部也大量使用來開發諸如CMS系統以及其他其他一些數據分析系統的前端頁面,為此個人非常感興趣并將其作為帽子卡的擴展內容來進行課余學習。 Javascript

        Javascript做為當下的熱門語言,用途很廣泛,從前端到后端處處可見其存在,該技術如今在我們項目內部也大量使用來開發諸如CMS系統以及其他其他一些數據分析系統的前端頁面,為此個人非常感興趣并將其作為帽子卡的擴展內容來進行課余學習。
        Javascript框架鱗次櫛比,但基本原理大致相同,因此選用國內人開發的vue.js進行一個初步的嘗試。學習vue.js也一周多的時間了,說起vue的主要用法,無外乎Declarative Rendering、Component System、Client-side Routing、Vue-resource、Axios以及視項目大小而決定是否使用的Vuex,學習vue事小,主要轉變思維,面向前后端分離的組件式web開發才是真正想去實踐的。

        正好我的個人網站CodeSheep最近要開發后臺管理,因此正好用vue這一套來實現了一下。說到后臺管理,繞不開的問題就是權限的管理。既然想實踐前后端分離這種思想,因此后臺管理的所有web前端的東西應該獨立由前端完成,這其中就包括很重要的由前端來根據權限進行相關東西的控制。我們想要做到的是:不同的權限對應著不同的路由,同時頁面側邊欄也應該根據不同的權限,來異步生成對應的菜單,講白了就是后臺管理時不同權限的用戶其看到的界面菜單是不一樣的,因此有了這里實現登錄和權限驗證的一套流程。
        具體實現

        1、點擊“登錄”按鈕觸發登錄事件

        this.$store.dispatch('LoginByEmail', this.loginForm).then(() => {
         this.$router.push({ path: '/' }); //登錄成功之后重定向到首頁
        }).catch(err => {
         this.$message.error(err); //登錄失敗提示錯誤
        });
        

        其中異步觸發的actions LoginByEmail的處理內容如下:

        LoginByEmail ({ commit }, userInfo) {
         const email = userInfo.email.trim()
         return new Promise((resolve, reject) => {
         loginByEmail(email, userInfo.password).then(response => {
         const data = response.data
         setToken(response.data.token)
         commit('SET_TOKEN', data.token)
         resolve()
         }).catch(error => {
         reject(error)
         })
         })
         }
        

        很容易看出想做的是將從服務器端拿到的token(唯一標示用戶身份)放到瀏覽器本地Cookie中去

        2、全局鉤子router.beforeEach中攔截路由

        這一步是核心,具體處理流程示意如下:

        路由攔截處理流程

        具體代碼如下:

        router.beforeEach((to, from, next) => {
         if (getToken()) { // 判斷是否取到token
         if (to.path === '/login') {
         next({ path: '/' })
         } else {
         if (store.getters.roles.length === 0) { // 判斷當前用戶是否已獲取完user_info信息
         store.dispatch('GetInfo').then(res => { // 獲取user_info
         const roles = res.data.role
         store.dispatch('GenerateRoutes', { roles }).then(() => { // 生成可訪問的路由表
         router.addRoutes(store.getters.addRouters) // 動態添加可訪問路由表
         next({ ...to }) // 放行路由
         })
         }).catch(() => {
         store.dispatch('FedLogOut').then(() => {
         next({ path: '/login' })
         })
         })
         } else {
         next() // 放行該路由
         }
         }
         } else {
         if (whiteList.indexOf(to.path) !== -1) { // 在免登錄白名單里的路徑,繼續讓其訪問
         next()
         } else { // 其他不在白名單里的路徑全部讓其重定向到登錄頁面!
         next('/login')
         alert('not in white list, now go to the login page')
         }
         }
        })
        

        流程圖中幾個重要步驟解釋一下:

        判斷前端是否取到了token令牌:getToken()

        操作很簡單,主要是從Cookie中獲取,看token是不是已經拿到了:

        export function getToken () {
         return Cookies.get(TokenKey)
        }
        

        vuex異步操作store.dispatch('GetInfo'):獲取用戶信息

         GetInfo ({ commit, state }) {
         return new Promise((resolve, reject) => {
         getInfo(state.token).then(response => {
         const data = response.data
         console.log(data)
         commit('SET_ROLES', data.role)
         commit('SET_NAME', data.name)
         resolve(response)
         }).catch(error => {
         reject(error)
         })
         })
         }
        

        操作也很簡單,用一個get的restful api從服務器獲取用戶的角色和名字

        vuex異步操作store.dispatch('GenerateRoutes', { roles }):根據不同的roles來生成不同的前臺路由

         GenerateRoutes ({ commit }, data) {
         return new Promise(resolve => {
         const { roles } = data
         let accessedRouters
         if (roles.indexOf('admin') >= 0) {
         accessedRouters = asyncRouter
         } else {
         accessedRouters = filterAsyncRouter(asyncRouter, roles)
         }
         commit('SET_ROUTERS', accessedRouters)
         resolve()
         })
         }

        從代碼中可以看出,我這是只區分了管理員角色admin和其他普通用戶(即非Aadmin兩種權限)

        該系列的實踐后續還將嘗試更多,將會一一撰帖成文,我也是個初學者,路漫漫而求索之。。

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        基于vue實現網站前臺的權限管理(前后端分離實踐)

        基于vue實現網站前臺的權限管理(前后端分離實踐):Javascript做為當下的熱門語言,用途很廣泛,從前端到后端處處可見其存在,該技術如今在我們項目內部也大量使用來開發諸如CMS系統以及其他其他一些數據分析系統的前端頁面,為此個人非常感興趣并將其作為帽子卡的擴展內容來進行課余學習。 Javascript
        推薦度:
        標簽: VUE 后臺管理 實踐
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 国产无遮挡又黄又爽免费网站| 亚洲性线免费观看视频成熟| 77777亚洲午夜久久多人| 亚洲国产精品乱码在线观看97| 一级毛片免费观看不卡视频| 亚洲成av人在线视| 免费无码成人AV在线播放不卡| 四虎永久成人免费影院域名| 亚洲AV综合永久无码精品天堂| 日韩免费a级在线观看| 美女黄频免费网站| 亚洲国产精品日韩| 亚洲中文字幕久久精品无码2021| 亚洲AV成人无码网站| 亚洲一区免费视频| 亚洲伊人成无码综合网| 精品无码一级毛片免费视频观看| 免费看的黄色大片| 激情内射亚洲一区二区三区爱妻| 黄色片在线免费观看| 亚洲av无码一区二区三区人妖| 亚洲国产黄在线观看| 美女在线视频观看影院免费天天看 | 亚洲精品456播放| 亚洲综合色丁香麻豆| 69天堂人成无码麻豆免费视频| 亚洲熟妇无码AV不卡在线播放| 日韩精品电影一区亚洲| 爽爽爽爽爽爽爽成人免费观看| 亚洲精品综合一二三区在线| 免费精品国产自产拍在线观看图片 | baoyu777永久免费视频| 亚洲精品视频在线观看免费| 在线观看无码的免费网站| 中文亚洲AV片在线观看不卡 | 精品国产无限资源免费观看| 337P日本欧洲亚洲大胆精品| 91网站免费观看| 国产精品亚洲а∨天堂2021| 国产免费观看黄AV片 | 国产成人综合久久精品免费|