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的变参形式。