授權流程
1.首先調用Subject.isPermitted/hasRole接口,其會委托給SecurityManager,而 SecurityManager 接着會委托給 Authorizer。
2.Authorizer是真正的授權者,如果調用如isPermitted(“user:view”),其首先會通過PermissionResolver 把字元串轉換成相應的 Permission 執行個體。
3.在進行授權之前,其會調用相應的 Realm 擷取 Subject 相應的角色/權限用于比對傳入的角色/權限。
4.Authorizer 會判斷 Realm 的角色/權限是否和傳入的比對,如果有多個Realm,會委托給 ModularRealmAuthorizer 進行循環判斷,如果比對如 isPermitted/hasRole 會傳回true,否則傳回false表示授權失敗。
ModularRealmAuthorizer進行多Realm比對流程
1.首先檢查相應的 Realm 是否實作了實作了Authorizer。
2.如果實作了 Authorizer,那麼接着調用其相應的isPermitted/hasRole接口進行比對。
3.如果有一個Realm比對那麼将傳回 true,否則傳回 false。