shiro基于角色的授權

jopen 10年前發布 | 26K 次閱讀 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的變參形式。

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!