真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

vue-router中怎么實(shí)現(xiàn)權(quán)限控制-創(chuàng)新互聯(lián)

vue-router中怎么實(shí)現(xiàn)權(quán)限控制,相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。

創(chuàng)新互聯(lián)長(zhǎng)期為上千客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為郟縣企業(yè)提供專業(yè)的網(wǎng)站制作、做網(wǎng)站,郟縣網(wǎng)站改版等技術(shù)服務(wù)。擁有十年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。

在vue-router控制前端權(quán)限是常見需求:

  1. 有一種做法是直接在后端完成判斷,提供頁(yè)面列表和操作列表,在前端進(jìn)行渲染,但這個(gè)方案并不優(yōu)雅,前后端耦合度比較高。

  2. 比較常見的做法是把登錄頁(yè)面獨(dú)立在router之外,專門寫一個(gè)權(quán)限控制文件,在登錄之后根據(jù)用戶權(quán)限加載router,之后把權(quán)限作為參數(shù)傳入各種組件中,以控制元素的渲染。這個(gè)方法比較合理,沒有什么額外的開銷,只是需要獨(dú)立寫一個(gè)登錄頁(yè)面和權(quán)限控制文件比較麻煩一些,特別是對(duì)一些小項(xiàng)目而言。

我們希望還有更簡(jiǎn)單的方式。這個(gè)時(shí)候梳理一下需求,我們的主要目標(biāo)是:

  1. 菜單欄控制,根據(jù)權(quán)限渲染可以進(jìn)入的頁(yè)面菜單;

  2. 操作按鈕權(quán)限控制,沒有操作權(quán)限的不予顯示;

  3. 如果有人通過(guò)直接點(diǎn)擊鏈接或輸入地址進(jìn)入沒有權(quán)限的頁(yè)面,則進(jìn)行攔截;

第一、第二個(gè)目標(biāo)是容易實(shí)現(xiàn)的,把權(quán)限列表傳入對(duì)應(yīng)組件,通過(guò)v-if判斷即可,需要解決的是越權(quán)頁(yè)面的攔截問(wèn)題。在上面常見的做法中,為了實(shí)現(xiàn)攔截,單獨(dú)寫了一個(gè)登錄頁(yè)面,登錄之后再根據(jù)權(quán)限加載路由,這樣,沒有權(quán)限的路由根本不會(huì)加載,于是被導(dǎo)向404頁(yè)面。

那么,現(xiàn)在的問(wèn)題是,怎么樣會(huì)有更簡(jiǎn)單的方式?

顯然,如果我們不想單獨(dú)寫login頁(yè)面,那么router在登錄前就完成加載了。如果無(wú)法通過(guò)router自動(dòng)將越權(quán)頁(yè)面導(dǎo)向404頁(yè)面,我們能做的,只能手動(dòng)引導(dǎo)了。思路清楚了,實(shí)現(xiàn)起來(lái)就毫無(wú)壓力:

根據(jù)vue組件的生命周期,我們可以在mounted鉤子上進(jìn)行權(quán)限判斷,如果通過(guò)props傳入的用戶權(quán)限列表沒有對(duì)應(yīng)權(quán)限,就跳轉(zhuǎn)頁(yè)面到404:

mounted () {
     if (!this.check_user_privilege (current_page)) {
       this.$Message.error('權(quán)限不足');
       this.$router.push('404');
     }
 }

當(dāng)然,事實(shí)上vue-router也提供了頁(yè)面跳轉(zhuǎn)時(shí)的鉤子方法,全局的有beforeEach、afterEach等,我們希望直接在組件內(nèi)使用,則可以使用beforeRouteEnter方法,在進(jìn)入頁(yè)面時(shí)進(jìn)行判斷,比如:

beforeRouteEnter (to, from, next) {
     next(vm => {
       if (!vm.check_user_privilege (current_page)) {
         vm.$Message.error('權(quán)限不足');
         vm.$router.push('404');
       }
     })
   },

具體可以參考[文檔]。

當(dāng)然,就這個(gè)例子來(lái)說(shuō),用vue-router提供的鉤子還不如直接在mounted寫判斷條件,因?yàn)閎eforeRouteEnter方法中的next需要調(diào)用組件參數(shù),是在mounted執(zhí)行之后才執(zhí)行的,而我們又經(jīng)常需要在mounted鉤子加載頁(yè)面數(shù)據(jù),為了避免浪費(fèi),先進(jìn)行判斷是比較好的。

和常用方法相比,簡(jiǎn)單方法是有額外開銷的,主要在于需要完全加載路由,同時(shí)在加載頁(yè)面后進(jìn)行了一次判斷。不過(guò)從寫代碼的角度來(lái)說(shuō),似乎邏輯上更節(jié)約,因?yàn)椴挥昧硗鈱懸粋€(gè)集中進(jìn)行權(quán)限控制的文件了,至于每個(gè)頁(yè)面的權(quán)限判斷,那是本來(lái)在菜單欄就要做的事情,延伸到不同頁(yè)面也不算什么負(fù)擔(dān)。

會(huì)不會(huì)有什么副作用呢?暫時(shí)來(lái)看似乎是沒有的,如果在mounted最開始就進(jìn)行頁(yè)面權(quán)限判斷,也不會(huì)有加載越權(quán)數(shù)據(jù)的問(wèn)題,況且數(shù)據(jù)權(quán)限是后端需要單獨(dú)判斷的,不應(yīng)該讓前端去擔(dān)心。

看完上述內(nèi)容,你們掌握vue-router中怎么實(shí)現(xiàn)權(quán)限控制的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司行業(yè)資訊頻道,感謝各位的閱讀!

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。


網(wǎng)站欄目:vue-router中怎么實(shí)現(xiàn)權(quán)限控制-創(chuàng)新互聯(lián)
URL鏈接:http://weahome.cn/article/dcdcei.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部