84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
ringa_lee
基於角色的權限控制不是個好辦法,具體可以看這篇文章:https://stormpath.com/blog/ne...
我的專案也是用的shiro,不是基於角色的,而是基於permission。簡單來說就是這樣的:
每個url、選單、按鈕都是一個resource,這個resource有對應的permission
角色擁有permission(若干)
判斷這個角色能不能獲得資源的方法很簡單,看這個角色有沒有對應資源permission就行了
在這裡只有permission是寫死的
每一個後端的請求都需要進行驗證,比如說一個獲取用戶資訊列表的ajax請求,那麼會驗證當前的請求有沒有權限獲取啊,去獲取請求的cookie,在和伺服器上的session做個判斷,如果有權限就給他數據,如果沒有就回傳403之類的。
一般會將资源URL统一管理起来,会提供管理平台维护权限,利用interceptor/filter校驗使用者是否有對應的權限。
资源URL
interceptor/filter
你想從資料庫取得角色是為什麼呢?因為權限會改變?這種情況你必須將資源維護起來,或是想要實現動態權限就不可能。
權限較為簡單就像Tomcat Manager中的角色一樣,那直接使用硬編碼這也沒有什麼問題。
Tomcat Manager
最主要是需求要做成什麼樣子。
我覺得你這是兩個問題。
先防止介面被其他人調用,這個可以使用token的機制來做限制,沒有token或token不正確就回傳403。
token
剩下的就是權限問題,用shiro和spring security等等都行,可以使用session來區分不同權限的使用者。
服務端產生一個token回傳給客戶端,客戶端每次請求就帶著這個token,後端用filter統一處理;
如果能解決問題3,那問題2就沒意義了;
記憶中shiro是可以在程式碼層級控制權限的,就來看看文件吧。
權限有多個粒度的,動作權限,資料權限,不同狀態條件下的權限,僅在某個層面上控制不了的,常見的RBAC,ACL都只能做到部分控制,還是要結合自身狀況,靈活應用,沒有包治百病的妙藥。
你可以考慮用下Spring Security或是Shiro進行權限管理,具體操作可以上網查資料
基於角色的權限控制不是個好辦法,具體可以看這篇文章:https://stormpath.com/blog/ne...
我的專案也是用的shiro,不是基於角色的,而是基於permission。簡單來說就是這樣的:
每個url、選單、按鈕都是一個resource,這個resource有對應的permission
角色擁有permission(若干)
判斷這個角色能不能獲得資源的方法很簡單,看這個角色有沒有對應資源permission就行了
在這裡只有permission是寫死的
每一個後端的請求都需要進行驗證,比如說一個獲取用戶資訊列表的ajax請求,那麼會驗證當前的請求有沒有權限獲取啊,去獲取請求的cookie,在和伺服器上的session做個判斷,如果有權限就給他數據,如果沒有就回傳403之類的。
一般會將
资源URL
统一管理起来,会提供管理平台维护权限,利用interceptor/filter
校驗使用者是否有對應的權限。你想從資料庫取得角色是為什麼呢?因為權限會改變?這種情況你必須將資源維護起來,或是想要實現動態權限就不可能。
權限較為簡單就像
Tomcat Manager
中的角色一樣,那直接使用硬編碼這也沒有什麼問題。最主要是需求要做成什麼樣子。
我覺得你這是兩個問題。
先防止介面被其他人調用,這個可以使用
token
的機制來做限制,沒有token或token不正確就回傳403。剩下的就是權限問題,用shiro和spring security等等都行,可以使用session來區分不同權限的使用者。
服務端產生一個token回傳給客戶端,客戶端每次請求就帶著這個token,後端用filter統一處理;
如果能解決問題3,那問題2就沒意義了;
記憶中shiro是可以在程式碼層級控制權限的,就來看看文件吧。
權限有多個粒度的,動作權限,資料權限,不同狀態條件下的權限,僅在某個層面上控制不了的,常見的RBAC,ACL都只能做到部分控制,還是要結合自身狀況,靈活應用,沒有包治百病的妙藥。
你可以考慮用下Spring Security或是Shiro進行權限管理,具體操作可以上網查資料