最近,公司老大給了這個任務,功能差不多完成了,現將一些經過分享給大家!
------------------開始設計時-----------------
- 菜單權限的設計
思路:
- 5個表的建立:用戶表、角色表、菜單表、用戶角色表、角色菜單表
- 后台動態加載json數據給前台。 這里的json數據,就是菜單欄的數據(就是通過后台數據查詢找出當前用戶擁有哪些菜單)
- 用戶(操作員、管理員、超級管理員)只能看到自己對應的菜單數據
思路:sql語句加上對應的where條件 ,來對查詢到的所有數據做進一步的篩選。
實現步驟:
- 設計表結構,
- 依次往菜單表、角色表、用戶表中加入數據,
- 根據頁面需要的數據,設計webapi接口方法,
- 通過網頁操作將數據加入角色菜單 rel_rolemenu、用戶角色rel_userrole的關系表中
-----------------------功能完成后的表-------------------------------
用戶表
角色表
菜單表
關系表
-------------------------開發過程中發現的問題------------------------------
1. 返回當前用戶的菜單按鈕數據
A方式 通過關系表查詢 , 這種方式查詢不方便 (如果用EF的導航屬性的話,實現起來還是相對簡潔些的) ,但是做數據修改的時候很方便 ,可以直接對關系表做操作。
B方式 通過存儲的MenuIds去菜單表中做查詢,這種方式查看查詢方便,但是修改不方便,需要 在 用戶更新角色數據、角色更新權限數據、權限數據更新時,去更新用戶表里面的MenuIds值 很是繁瑣
我采用的方式:由於個人比較懶,喜歡數據能夠直觀些,也不太知道哪種方式好,就把2種方式都用了! 但是個人建議,還是用第一種方式,不要弄復雜了,功能能實現就行!
事后分析總結: A方式 在表里就不需要加MenuIds、RoleIds字段來處理,直接通過 用戶角色列表,操作關系表 rel_userRole、rel_roleMenu表來處理,由於我們現有公司該表沒有做軟刪除的設計,還需要在刪除 單條menuId、roleId值時,去這些關系表里刪除對應的記錄
B方式 實際上就不需要建關系表了, 而要加上MenuIds、RoleIds字段值,然后通過這些MenuIds、RoleIds去Menu表、Role表中找出對應的記錄就可以了。 在進行menu表、role表數據進行更新時要找出它所影響的 用戶數據、角色數據是哪些、然后更新這些數據的MenuIds、RoleIds值
2. 菜單表父子結構的數據
A方式 直接將表數據交給前端人員處理成樹形結構
B方式 自己在后端處理這些數據,然后將處理的樹形結構數據返回給前端人員,具體實現方法,我將在我的下一篇博客里寫出來