在項目開發中,需要實作shiro的超級管理者功能。
但網上查了一下相關實作,發現很多實作都是在使用者擷取權限資源時,如果是超級管理者,就将系統的全部權限,角色賦給使用者。
我個人覺得該方法比較複雜,取權限資源時,還要特别為超級管理者做特殊的處理。實際項目中,有沒有更簡單的方法呢?
答:有的,隻需要很簡單的實作.
實作方式如下:
在內建shiro時,我們都需要繼承AuthorizingRealm該類,實作隻需要重寫裡面的isPermitted及hasRole方法即可。
示例代碼如下:
public class MyShiroRealm extends AuthorizingRealm {
@Override
public boolean isPermitted(PrincipalCollection principals, String permission){
SecurityUser user = (SecurityUser)principals.getPrimaryPrincipal();
return user.isAdmin()||super.isPermitted(principals,permission);
}
@Override
public boolean hasRole(PrincipalCollection principals, String roleIdentifier) {
SecurityUser user = (SecurityUser)principals.getPrimaryPrincipal();
return user.isAdmin()||super.hasRole(principals,roleIdentifier);
}
。。。。
}
該方法如此的簡單,比我們用什麼攔截器的都簡單友善.
注意,該方法隻适用于使用注解RequiresRoles,RequiresPermissions的權限攔截!