數據庫表結構
() () () () () ()
假定我們使用了MVC的結構,並通過url訪問對應的模塊及類和函數。
表中第一行表示一個操作,title表示操作名,menu_id表示屬於哪一個菜單選項,module表示模塊名(沒有可以略過),class表示類名,method表示函數名
此外我們還需要一個用戶組的表,大致如下:
其中access_list中保存的當前用戶組所擁有的權限ID(對應上個權限表中的ID)
當然我們還需要一個用戶表來對應用戶組表
group_id表示的第用戶所對應的用戶組
當我們訪問一個url的時候,比如:
http://testApp.test.com/index.php/module/testModule/testClass/testAction
通過路由分析,我們得到相應的數據:
模塊->testModule
類->testClass
函數->testAction
通過三個參數,我們查找權限表中的數據,得到一個唯一的id值。
然後對比用戶組中access_list中的數據,如果數據中包括有這個id,那麼當前用戶擁有當前操作的權限,反之沒有權限。
那麼我們如何來控制菜單選項,當用戶有權限時才顯示呢?
因為在權限表中的每個操作都對應有一個menu_id,即菜單選項。我們通過查找當前用戶所屬於的用戶組信息,得到他所擁有的權限操作ID,再通過ID取得他所屬於的菜單選項,這樣就得到了當前用戶所擁有的菜單權限。