1、權(quán)限管理是什么
權(quán)限是對(duì)特定資源的訪問(wèn)許可麻裁,所謂權(quán)限控制,也就是確保用戶只能訪問(wèn)到被分配的資源源祈。而前端權(quán)限歸根結(jié)底是請(qǐng)求的發(fā)起權(quán)煎源,請(qǐng)求的發(fā)起可能有下面兩種形式觸發(fā):a、頁(yè)面加載觸發(fā)香缺; b手销、頁(yè)面上的按鈕點(diǎn)擊觸發(fā)。
對(duì)觸發(fā)權(quán)限的源頭進(jìn)行控制:
1)路由方面图张,用戶登錄后只能看到自己有權(quán)訪問(wèn)的導(dǎo)航菜單锋拖,也只能訪問(wèn)自己有權(quán)訪問(wèn)的路由地址诈悍,否則將跳轉(zhuǎn)4xx?提示頁(yè)。
2)視圖方面兽埃,用戶只能看到自己有權(quán)瀏覽的內(nèi)容和有權(quán)操作的控件侥钳。
2、如何進(jìn)行權(quán)限控制
前端權(quán)限控制可以分為四個(gè)方面:
1)接口權(quán)限
接口權(quán)限目前一般采用jwt的形式來(lái)驗(yàn)證讲仰,沒(méi)有通過(guò)的話一般返回401慕趴,跳轉(zhuǎn)到登錄頁(yè)面重新進(jìn)行登錄。登錄完拿到token鄙陡,將token存起來(lái)冕房,通過(guò)axios請(qǐng)求攔截器進(jìn)行攔截,每次請(qǐng)求的時(shí)候頭部攜帶token趁矾。
2)路由權(quán)限
方案一:
初始化即掛載全部路由耙册,并且在路由上標(biāo)記相應(yīng)的權(quán)限信息,每次路由跳轉(zhuǎn)前做校驗(yàn)毫捣。
缺點(diǎn):a详拙、加載所有的路由,如果路由很多蔓同,而用戶并不是所有的路由都有權(quán)限訪問(wèn)饶辙,對(duì)性能會(huì)有影響;
b斑粱、全局路由守衛(wèi)里弃揽,每次路由跳轉(zhuǎn)都要做權(quán)限判斷。
c则北、菜單信息寫(xiě)死在前端矿微,要改個(gè)顯示文字或權(quán)限信息,需要重新編譯尚揣;
d涌矢、菜單跟路由耦合在一起,定義路由的時(shí)候還有添加菜單顯示標(biāo)題快骗,圖標(biāo)之類(lèi)的信息娜庇,而且路由不一定作為菜單顯示,還要多加字段進(jìn)行標(biāo)識(shí)
方案二:
初始化的時(shí)候先掛載不需要權(quán)限控制的路由方篮,比如登錄頁(yè)思灌,404等錯(cuò)誤頁(yè)。如果用戶通過(guò)URL進(jìn)行強(qiáng)制訪問(wèn)恭取,則會(huì)直接進(jìn)入404泰偿,相當(dāng)于從源頭上做了控制。
登錄后蜈垮,獲取用戶的權(quán)限信息耗跛,然后篩選有權(quán)限訪問(wèn)的路由裕照,在全局路由守衛(wèi)里進(jìn)行調(diào)用addRoutes添加路由。
按需掛載调塌,路由就需要知道用戶的路由權(quán)限晋南,也就是在用戶登錄進(jìn)來(lái)的時(shí)候就要知道當(dāng)前用戶擁有哪些路由權(quán)限。
3)菜單權(quán)限
每次路由跳轉(zhuǎn)的時(shí)候都要判斷權(quán)限羔砾,這里的判斷也很簡(jiǎn)單负间,因?yàn)椴藛蔚膎ame與路由的name是一一對(duì)應(yīng)的,而后端返回的菜單就已經(jīng)是經(jīng)過(guò)權(quán)限過(guò)濾的姜凄,如果根據(jù)路由name找不到對(duì)應(yīng)的菜單政溃,就表示用戶有沒(méi)權(quán)限訪問(wèn);如果路由很多态秧,可以在應(yīng)用初始化的時(shí)候董虱,只掛載不需要權(quán)限控制的路由。取得后端返回的菜單后申鱼,根據(jù)菜單與路由的對(duì)應(yīng)關(guān)系愤诱,篩選出可訪問(wèn)的路由,通過(guò)addRoutes動(dòng)態(tài)掛載捐友。
4)按鈕權(quán)限
通過(guò)自定義指令進(jìn)行按鈕權(quán)限的判斷