前端的許可權控制
1.為什麼做前端許可權控制?
如果僅從技術實現的角度講,確實只在後端做控制就足夠了,但在實際專案中,前端許可權控制也有其不可或缺的作用,主要體現為三點:
(1)提升突破許可權的門檻
前端許可權控制是系統安全的排頭兵,雖然不是主力,但起碼手動輸 url、控制檯發請求、開發者工具改資料這種級別的入侵可以防範掉
(2)過濾越權請求,減輕服務端壓力
為了省錢,不該發的請求乾脆就讓他發不出去,頻寬都是錢買的
(3)提升使用者體驗
從使用者體驗角度出發,一個設計優良的系統理應根據許可權為每個使用者展現特定的內容,避免在介面上給使用者帶來困擾。
2.前端許可權控制具體指什麼?
(1)路由方面:使用者登入後只能看到自己有權訪問的導航選單,也只能訪問自己有權訪問的路由地址,否則將跳轉 4xx 提示頁;
(2)檢視方面:使用者只能看到自己有權瀏覽的內容和有權操作的控制元件;
(3)最後再加上請求控制作為最後一道防線,路由可能配置失誤,按鈕可能忘了加許可權,這種時候請求控制可以用來兜底,越權請求將在前端被攔截。
3.怎麼做前端許可權控制?
(1)知道使用者擁有哪些許可權,所以使用者登入後第一件事是獲取許可權資料。許可權資料至少應該包括路由許可權和資源許可權。
*路由許可權顧名思義,就是使用者可訪問的路由集合,以此作為設定前端路由和生成導航選單的依據;
*資源許可權是使用者可訪問的資源集合,資源可以簡單理解成使用者能夠發起的所有請求集合,以此作為檢視控制和請求攔截的依據。
(2)分別-實現對路由、檢視、請求的控制。
路由控制首先要實現動態選單,這樣就可以對常規訪問方式進行限制;對於非常規訪問方式比如手動修改 url,可以從前端路由處著手做控制。
路由控制的思路:
*初始化即掛載全部路由,每次路由跳轉前做校驗
*單獨做一個登入頁,登入後帶著使用者憑據跳轉到前端應用
*先初始化一個只有登入路由的應用,使用者登入後動態新增路由,當然這需要框架提供支援
檢視控制需要實現一個可以在檢視層呼叫的許可權驗證方法,輸入使用者期望的許可權,輸出是否擁有該許可權,將呼叫這個方法的結果,作為介面上需要驗證許可權的控制元件或元素顯示與否的依據。
請求控制實際上就是為你使用的 HTTP 庫實現一個請求攔截器,對將要發起的請求與使用者資源許可權進行匹配,攔截越權請求。
值得一提的是對於攜帶引數的 url,需要先進行模式約定,比如/people/1這個 url 可以在許可權中描述為/people/**,那麼攔截器中就要先將這種 url 處理成約定後的格式,然後再進行許可權驗證。