<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
        主站蜘蛛池模板: 亚洲爆乳大丰满无码专区| 精品日韩亚洲AV无码| 亚洲国产区男人本色| 久久久久久久久免费看无码| 久久亚洲精品中文字幕无码| 久久免费高清视频| 亚洲gv白嫩小受在线观看| 免费精品久久天干天干| 亚洲精品午夜无码电影网| 久久久精品免费国产四虎| 亚洲av无码精品网站| 最刺激黄a大片免费网站| 亚洲日韩乱码中文无码蜜桃臀| 久久永久免费人妻精品下载| 亚洲精品自在线拍| 一个人看www在线高清免费看| 国产精品亚洲综合久久| 国产成人3p视频免费观看| 窝窝影视午夜看片免费| 国产亚洲AV手机在线观看 | 亚洲精品无码不卡在线播HE| 老司机精品免费视频| 亚洲av鲁丝一区二区三区| 18女人毛片水真多免费| xxx毛茸茸的亚洲| 免费a级毛片永久免费| 国产一二三四区乱码免费| 91在线精品亚洲一区二区| 天天摸天天操免费播放小视频| 在线观看亚洲电影| 久久亚洲国产中v天仙www| 可以免费看黄视频的网站| 噜噜噜亚洲色成人网站| 久久亚洲国产视频| 最近中文字幕无吗免费高清| 一级做a爱过程免费视| 亚洲综合日韩中文字幕v在线| 日韩伦理片电影在线免费观看| 热久久这里是精品6免费观看| 91嫩草亚洲精品| 亚洲精品成人区在线观看|