權限管理系統之:實現登錄用戶獲取菜單列表

讀前申明:

昨天我們實現了權限管理的表結構設計以及攔截器的功能實現: ,今天我們就來實現登錄用戶獲取菜單列表的接口。

登錄用戶獲取菜單列表實現一覽:

要想實現獲取登錄用戶的菜單列表,首先必須先獲取所有系統權限AP,再獲取用戶被授予的權限UP,然後將AP UP合併、分級後返回給前端。具體圖示如下:

權限管理系統之:實現登錄用戶獲取菜單列表

登錄用戶獲取菜單列表(綠色代表有權限,紅色代表無權限)

具體實現代碼我們一步步類拆分:

Step一:獲取系統所有權限列表

獲取系統所有權限列表(AP),只需要查詢t_permission表就行,代碼如下:

權限管理系統之:實現登錄用戶獲取菜單列表

獲取系統所有權限列表

Step二:根據userId獲取擁有的權限列表

獲取登錄用戶擁有的權限列表(UP),這個請大家看我的上一批文章 末尾之處,有對這個方法的描述,具體代碼如下:

權限管理系統之:實現登錄用戶獲取菜單列表

根據userId獲取擁有的權限列表

Step三:合併並轉化為menu對象

獲取到了系統所有權限AP + 用戶擁有的權限列表UP 後,我們對AP UP做合併(交集)操作,具體思想如圖一,具體實現代碼如下:

權限管理系統之:實現登錄用戶獲取菜單列表

合併並轉化為menu對象

具體Menu對象詳細信息如下:

權限管理系統之:實現登錄用戶獲取菜單列表

Menu對象詳細信息

Step四:分級

當我們拿到了AP+UP合併後的權限列表後,考慮到這只是一個初步的用戶權限信息List,並沒有對一級菜單,二級菜單 ... n級菜單,按鈕進行層次分級,以下代碼就是對合並後的列表進行分級,主要用到了遞歸。

權限管理系統之:實現登錄用戶獲取菜單列表

分級

遞歸實現父菜單的層次分級:

權限管理系統之:實現登錄用戶獲取菜單列表

Step五:返回菜單

權限管理系統之:實現登錄用戶獲取菜單列表

返回菜單

接口返回示例:

權限管理系統之:實現登錄用戶獲取菜單列表

接口返回示例

客戶端使用

菜單加載:

遍歷返回的permissions列表,遍歷出菜單(根據type值) 而且authed為true 的列表加載出菜單即可,菜單的url可以配置為頁面的html地址。

按鈕加載:

遍歷返回的permissions列表,根據當前菜單tag(頁面資源唯一標識)找到permission對應的項per,再根據per 的subMenus 對象(authed為true 的列表)加載出菜單即可,按鈕的url即是點擊按鈕的響應地址(也是後端的RequestMapping地址)。

最後

至此,便實現登錄用戶獲取菜單列表的接口。

剛來頭條不久,如果大家喜歡我的文章,還請關注我(有關必回),我將繼續輸出更多的文章。


分享到:


相關文章: