之前写的ssm权限系统,不再赘述,由于之前的系统是由上到下,一层层查找封装的权限数据结构,系统性能不好,和数据库会有多次交互,下面介绍第二种方式:上一篇:layuiAdmin后台框架以及动态权限_源码杂录的博客-CSDN博客_layuiadmin
/**
* 根据角色,获取角色的权限
* @param id
* @return
*/
public List<SysPermission> getPermissionListByRoleId(Integer id){
List<SysPermission> s = sysRolePermissionDao.getAllPermissionByRoleId(id);
List<SysPermission> permissionList = new ArrayList<>();
for (SysPermission sysPermission : s) {
if (sysPermission.getFatherId() == 0) {
sortSysPermissionList(sysPermission,s);
permissionList.add(sysPermission);
}
}
return permissionList;
}
/**------------------由下到上的递归权限-------------------------------
* 递归获取权限
* @param sysPermission
* @param permissionList
*/
public static void sortSysPermissionList(SysPermission sysPermission, List<SysPermission> permissionList) {
List<SysPermission> permissionChildList = new ArrayList<>();
for (SysPermission permission : permissionList) {
if (permission.getFatherId()==sysPermission.getId()){
permissionChildList.add(permission);
sortSysPermissionList(permission,permissionList);
}
}
if (sysPermission.getHasSon()==1){
sysPermission.setChild(permissionChildList);
}
}
这样子做事一次把数据都取出来,然后在内存中处理数据,速度会提升不少!