shiro基于角色的授權
1.角色檢查
如果你要基于簡單/傳統的隱含角色名進行訪問掏,你可以執行角色檢查:
如果你想簡單地檢查一下當前Subject是否擁有一個角色,你可以在一個實例上調用hasRole*方法的變形。
例如,查看一個Subject是否有特定(單獨)的角色,你可以調用subject.hasRole(roleName)方法,做出相應的反饋。
Subject currentUser = SecurityUtils.getSubject();
if (currentUser.hasRole("administrator")) {
//show the admin button
} else {
//don't show the button? Grey it out?
}
下面是你可以根據需要調用的函數:
hasRole(String roleName)
如果Subject指定了特定的角色返回真,否則返回假;
hasRoles(List roleNames)
返回一個與參數順序相對應的hasRole結果數組,當一次有多個角色需要檢測時非常有用(如定制一個復雜的視圖)。
hasAllRoles(Collection roleNames)
如果Subject指定了所有角色返回真,否則返回假。
2.角色判斷
還有另一個方法檢測Subjet是否是指定為某個角色,你可以在的代碼執行之前簡單判斷他們是否是所要求的角色,如果Subject不是所要求的角色, AuthorizationException異常將被拋出,如果是所要求的角色,判斷將安靜地執行并按期望順序執行下面的邏輯。
例如:
Subject currentUser = SecurityUtils.getSubject();
//guarantee that the current user is a bank teller and
//therefore allowed to open the account:
currentUser.checkRole("bankTeller");
openBankAccount();
與hasRole*方法相比,這種方法的好處在于代碼更為清晰,如果當前Subject不滿足所需條件你不需要建立你自己的AuthorizationExceptions
與isPermitted* 方法相比較,這種方法的優勢是代碼更為清晰,如果當前Subject不符合條件,你不必創建你自己的AuthorizationExceptions異常(如果你不想那么做)。。
下面是你可以根據需要調用的函數:
checkRole(String roleName)
如果Subject被指定為特定角色則安靜地返回否則拋出AuthorizationException異常;
checkRoles(Collection roleNames)
如果Subject被指定了所胡特定的角色則安靜地返回否則拋出AuthorizationException異常;
checkRoles(String... roleNames)
和上面的checkRoles具有相同的效果,但允許Java5的變參形式。