管理系統的前端權限控制

問題:項目使用的是shiro框架處理用戶登錄權限,那麼前端要如何配合後端完成系統的權限控制?

前端權限比較常見的就是RBAC基於角色的訪問控制,基本思想是系統的操作權限不是直接授予具體的用戶,而是在用戶與權限之間,建立角色集合,每個角色對應一組相應的權限,一旦用戶被賦予某種角色,那麼用戶便具有了此角色對應的操作權限。
這樣做的好處在於不必每次創建用戶都去分配權限集,只要分配用戶對應的角色,相比於用戶權限的變更角色的權限變更要少得多,這樣可以簡化用戶權限管理的系統開銷。

在angularJs構建的單頁面應用中,要配合後臺shiro框架,完成系統權限控制,整體來講主要需要處理3處:
1,UI處理;根據用戶擁有的權限,判斷頁面上的內容是否應該顯示
2,路由處理;不允許用戶通過URL訪問沒有權限訪問的界面
3,http請求處理;當我們發送一個數據請求,如果返回的satuts是40X,則通常重定向到一個錯誤提示頁面
前端要想實現以上權限控制,首先需要在應用初始化階段,創建一個優先執行的service,在service內通過發送一個同步的ajax請求(同步操作避免後面加載出現問題),將後臺shiro框架處理過的用戶對象請求回來,這個對象中包括用戶的角色數組roles,我們可以通過_.includes(roles,?)來判斷用戶具有的角色(?代表與後臺事先溝通好的角色值,例如1代表管理員,2代表普通用戶),然後在服務內創建角色判斷函數便於其他模塊調用,我們將這個service作爲全變量使用,其他模塊可以通過依賴注入的方式獲取service內部角色判斷函數(當然也可以通過$boradcast事件廣播處理,這裏我們未使用這種方法);
UI組件處理,依據判斷出的用戶權限進行顯隱,這裏我們仿造ng-if源碼,編寫指令用於處理UI組件的顯隱(當然我們可以直接在UI上使用ng-if,然後UI對應的controller,通過依賴注入判斷登陸用戶的角色,但這種方法不易複用,不推薦);
路由處理,我們這邊是將所有模塊路由抽象成常量,然後在模塊的路由常量內加入角色屬性,然後通過遍歷常量判斷可以訪問此模塊的角色,以此來區分頁面是否有權限跳轉,當用戶通過輸入url進行訪問頁面時,由於不具備權限,頁面將停留在當前界面。
Http處理,我們這邊已經通過在UI頁面控制了訪問入口不同權限的顯隱,也通過路由限制了輸入URl訪問頁面,所以http這塊未做特殊處理。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章