RBAC模型菜单的递归

实体类

public class SysPermissionVO extends BaseEntity implements Serializable {


    /**
     * 权限 ID
     */
    private Long id;

    /**
     * 父权限 ID (0为顶级菜单)
     */
    private Long parentId;

    /**
     * 权限名称
     */
    private String name;

    /**
     * 授权标识符
     */
    private String code;

    /**
     * 授权路径
     */
    private String url;

    /**
     * 类型(1菜单,2按钮)
     */
    private Integer type;

    /**
     * 图标
     */
    private String icon;

    /**
     * 备注
     */
    private String remark;

    private String createDate;

    private String updateDate;

    /**
     * 菜单顺序
     */
    private String numOrder;

    /**
     * 系统id
     */
    private String system;

    private String createUser;

    private String updateUser;

    /**
     * 菜单编号
     */
    private String menuNumber;

    private List<SysPermissionVO> childMenus;
}

递归方法

public class MenuTreeUtil {

    /**
     * 获取菜单树 获取顶层
     * 
     * @param listSysPermissionVO
     * @param applicationVO 应用信息
     * @return
     */
    public static SysPermissionVO getMenuTree(List<SysPermissionVO> listSysPermissionVO,
        SysPermissionVO applicationVO) {
        // 加入首层
        List<SysPermissionVO> resultList = new ArrayList<>();
        for (SysPermissionVO sysPermissionVO : listSysPermissionVO) {
            if (Long.valueOf(0).equals(sysPermissionVO.getParentId())) {
                List<SysPermissionVO> childTree = addChildMenu(sysPermissionVO, listSysPermissionVO);
                sysPermissionVO.setChildMenus(childTree);
                resultList.add(sysPermissionVO);
            }
        }
        applicationVO.setChildMenus(resultList);
        return applicationVO;
    }

    /**
     * 递归方法
     * 
     * @param sysPermissionVO
     * @param listSysPermissionVO
     * @return
     */
    private static List<SysPermissionVO> addChildMenu(SysPermissionVO sysPermissionVO,
        List<SysPermissionVO> listSysPermissionVO) {
        List<SysPermissionVO> childList = new ArrayList<>();
        for (SysPermissionVO permissionVO : listSysPermissionVO) {
            if (sysPermissionVO.getId().equals(permissionVO.getParentId())) {
                List<SysPermissionVO> childMenu = addChildMenu(permissionVO, listSysPermissionVO);
                permissionVO.setChildMenus(childMenu);
                childList.add(permissionVO);
            }
        }
        return childList;
    }
}

conteoller

public Result<SysPermissionVO> selectPermissionTree(
         SysPermissionVO sysPermissionVO) {
        Result<SysPermissionVO> resultVO = new Result<>();
        // 按照序号排序
        PageHelper.orderBy(sysPermissionVO.getNumOrder());
        // 获取当前应用的所有
        List<SysPermissionVO> resultListSysPermission = sysPermissionService.querySysPermissionAll(sysPermissionVO);
        // 应用信息拼装
        SysPermissionVO applicationVO = new SysPermissionVO();
        applicationVO.setId(Long.valueOf(0));
        applicationVO.setSystem(sysPermissionVO.getSystem());
        // 获取树
        SysPermissionVO resultMenu = MenuTreeUtil.getMenuTree(resultListSysPermission, applicationVO);
        resultVO.setData(resultMenu);
        // 分页总数
        return resultVO;
    }

 

猜你喜欢

转载自blog.csdn.net/qq_20143059/article/details/113385645
今日推荐