一直想找個時間自己寫個DEMO,因為看了不少這方面的資料,大致思路都應該清楚了,想自己動手寫寫應該更容易理解,同時也能找出自己那裡還沒有理解透徹,所以禮拜六、天就動手寫了個DEMO。
第一步:定義系統許可權。
第二步:添加導覽功能表
在添加導航的時候,同時需要選擇該菜單所擁有的許可權。
這裡的所屬許可權,用一個欄位儲存,後面給角色賦值許可權展示列表的時候,用來比對是否顯示。
第三步:新增角色,給角色賦值相應的許可權,還可以直接關聯到使用者(使用者管理就不介紹了)。
設定許可權
這裡每個菜單所對應的許可權是通過第二步中,新增導覽功能表的時候儲存到資料庫的。
這裡顯示的時候:擷取許可權列表跟導航表中的資料比對一下,有就現實無則不現實,這樣就可以動態控制每個導航的許可權了。
我把自己大致的思路描述下,還望各位指正。
資料庫設計:使用者表、使用者角色表、角色表、角色許可權表、許可權表(很傳統的許可權設計)。
1、把系統中會涉及到的所有功能許可權,全部存到“許可權表”並且用一個代碼標識。
2、例舉出系統中全部的功能菜單,同時也需要用一個代碼來標識這個菜單。具體許可權為“菜單代碼—許可權代碼”(當然這是我自己這樣設計的,也許不得當,但是我自己是這樣理解滴)。
當然這裡還要標識這個菜單擁有哪些許可權,譬如:增加、刪除等等,預設許可權為增、刪、改、差。這裡的“Lauthority”欄位儲存的是許可權拼接的字串,用逗號隔開
3、功能與角色的關聯。
建立角色表,添加角色(這裡不做介紹);然後是“設定許可權”,選擇使用權限設定頁面上面有圖,很簡單新增的時候判斷頁面哪些複選框勾選了,把勾選的值拼接起來,然後和角色ID一起存入“角色許可權表”(我直接把已經拼接好的許可權儲存到checkbox的value中,儲存到資料庫的時候直接判斷頁面上的checkbox是否選擇,然後拼接直接儲存資料庫)。
4、給使用者賦值角色。
建立好使用者資訊,然後用checkbox來展示角色,同理在checkbox的value中存入角色的ID值。然後把使用者ID和角色ID同時存入“使用者角色表”
這裡的對應關係是一對多的關係即一個使用者可以同時擁有多個角色(同理一個角色同時可以擁有多個許可權)。
5、使用。
登入的時候,可以擷取到使用者ID,通過使用者ID可以找到使用者所屬的許可權,然後找出許可權所擁有的功能,動態拼接成字串。
在進行操作的時候進行判斷是否擁有該許可權。
頁面判斷。
至此,我自己所理解的許可權管理就做出來了。以前都是個人意見,各位如果有好的想法或者發現錯誤,還望指正。