粗粒度URL等級的權限控制
權限控制主要分為粗粒度URL等級的權限控制和細粒度的方法等級權限控制。 (推薦學習:web前端影片教學)
我們在背景系統的操作,無論是點選一個按鈕,或是點選一個選單項,都是在存取伺服器端的一個資源,而標識伺服器資源的就是URL。如何控制使用者對伺服器資源的操作權限呢?在我們的資料庫中會有兩張表:
使用者表和權限控製表。使用者表中的使用者會同權限控製表中的相關權限進行關聯,透過Fliter判斷目前使用者是否具有權限對應URL位址,如果使用者對應的權限清單中沒有目前存取的URL位址,就提示權限不足。如果使用者對應的權限清單中含有URL位址,允許使用者存取。
簡單來說,基於URL粗粒度的權限控制,就是在資料庫中存放使用者、權限、存取URL對應的關係,在目前使用者存取一個URL位址時,就去查詢資料庫,判斷使用者目前具有的權限,是否包含這個URL,如果包含就允許訪問,如果不包含,就提示權限不足。
細粒度方法層級的權限控制
細粒度方法層級的權限控制相較粗粒度的權限控製粒度更加精細。同樣地,在點選後台系統地一個按鈕或是一個選單項目時,都是在存取伺服器端的一個URL資源,而這個URL位址會涉及到表現層、業務層和DAO資料層的方法。粗粒度的是透過查詢資料表中目前使用者的相關權限進行比對而判斷是否要對使用者放行,不同的是,細粒度的權限控制是基於自訂的註解實現的。
例如:在業務層中的某個方法上添加一個註解@Permission(“自定義權限名稱”),在這個註解中就包含了訪問方法需要的權限信息,在數據庫中同樣創建兩張表:用戶表和權限表,權限表中的權限名稱就要於剛剛在方法上添加的註解中的自定義名稱保持一致,說直白一點,就是在權限表中描述了權限信息,再透過註解的形式加入方法上,這樣就達到了對方法進行權限控制的目的,使用者表中的使用者對應的再權限表中的權限也在資料表中進行關聯,使用者能存取哪些方法、哪些資源就透過數據表結合註解來控制了。
更底層的實作原理是:spring管理著透過applicationContext.xml中配置的bean所對應的對象,當使用者存取一個URL位址時,spring就可以傳回被存取的真實對象的代理對象,在存取真實對象的每個方法時,代理對象就會取查詢資料庫判斷當前使用者是否具有註解中定義的權限,因為是真實對象的代理對象,所以是能夠實現這一系列操作的,最後根據判斷是否具有權限的結果來控制使用者的存取。
簡單來說,細粒度的權限控制是透過代理物件結合自訂的註解實現,在使用者存取目標物件的方法時,在方法上新增權限註解訊息,同時對目標物件建立代理對象,在存取真實對象之前先存取代理對象,代理對象前往資料庫查詢權限資料判斷使用者是否具有註解上描述所需的權限。如果具備訪問權限,就允許訪問,不具備訪問權限,就攔截訪問,提示權限不足。
以上是網路權限控制的實作方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!