zoukankan      html  css  js  c++  java
  • 二星权限树的设计与实现

    一:二星权限设计(用户权限多对多)

    1.用户登录查询用户表,有数据代表已经注册

    菜单不同的原因在于利用不同menuid进行查询,

    原本默认查询的是所有菜单,是通过顶级节点过去查的。

    2.通过uid,查询t_easyui_usermenu中间表,获取一个权限集合,对应着多个数据

    3.获取到一个menuid的集合,通过集合用关键字in得到多组父子关系的菜单(menuid由来:根据用户登陆id得来)

    二:创建二星权限

    因为是从昨天的树形菜单代码上进行升级,所以除了查询数据库中数据的方法和jsp页面有变以外,其余都差不多。详情可见https://www.cnblogs.com/huangting/p/11006712.html

    1.权限登陆(login.jsp+UserDao+UserAction)

    login.jsp也就是显示登陆的界面,我就简单的写了一个form表单提交用户id和用户密码去数据处理页面(UserAction);

    UserDao类从数据库中查询用户表判断id和password去登陆==>通过中间表查询登陆用户所对应的权限

        /**
         * 登陆查询用户表
         */
        public List<Map<String,Object>> list(Map<String,String[]> paMap,PageBean pageBean) throws InstantiationException, IllegalAccessException, SQLException{
            String sql="select * from t_easyui_user_version2 where true";
            String uid=JsonUtils.getParamVal(paMap, "uid");
            String upwd=JsonUtils.getParamVal(paMap, "upwd");
            if (StringUtils.isNotBlank(uid)) {
                sql= sql +" and uid ="+uid;
            }
            if (StringUtils.isNotBlank(upwd)) {
                sql= sql +" and upwd ="+upwd;
            }
            return super.executeQuery(sql, pageBean);
        }
        /**
         * 通过中间表查询登陆用户所对应的权限
         */
        public List<Map<String,Object>> listMenu(String uid,PageBean pageBean) throws InstantiationException, IllegalAccessException, SQLException{
            String sql="select * from t_easyui_usermenu where true";
            if (StringUtils.isNotBlank(uid)) {
                sql= sql +" and uid ="+uid;
            }
            return super.executeQuery(sql, pageBean);
        }

    UserAction类:用来处理从页面传来的数据,用集合接收判断跳转页面

    try {
            List<Map<String,Object>> list=this.uesrDao.list(req.getParameterMap(),null);
            if (list!=null && list.size() >0) {
            List<Map<String,Object>> listmenu=this.uesrDao.listMenu(req.getParameter("uid"), null);
            StringBuffer sb=new StringBuffer();
            for (Map<String, Object> map : listmenu) {
                sb.append(","+map.get("menuId"));
            }
            req.setAttribute("menuhid",sb.substring(1));
            }else {
                return "login";
            }
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return "index";

    三:树形菜单显示(index.jsp+MenuDao+index.js)

    MenuDao类:往类中新增了一个方法用来查询t_easyui_menu菜单表中数据,根据menuhid来查询父节点的数据

    public List<Map<String, Object>> listMenuSef(Map<String, String[]> map,PageBean pageBean)throws Exception{
            String sql=" select * from t_easyui_menu where true";
            String id=JsonUtils.getParamVal(map, "menuhid");
            if(StringUtils.isNotBlank(id)) {
                sql= sql + " and menuid in ("+id+")";    
            }
            else {  
                sql= sql + " and menuid =-1";
            }
            return super.executeQuery(sql, pageBean);
        }

    index.js的方法中URL的传值中添加menuhid的值

    url:'menuAction.action?methodName=treeMenu&&menuhid='+$("#menuhid").val(),

    index.jsp就是显示树形菜单的主页面,里面采取了Layout布局,分了北,南,西,东,中三部分,但是基于昨天的代码index.jsp中又往<body>里面加了一段代码去获取menuhid的值

    <input type="hidden" id="menuhid" value="${menuhid}">

    最后就是配置xml啦!

    弊端: 每添加一个用户,都需要添加相关权限数据,但是权限数据都是存在内存中,依次下去只会消耗大量资源

    配置完以后运行之后的结果如下图:

    今天就分享到这里,菜鸟一个多多包涵,谢谢大家观看!

  • 相关阅读:
    Linux C编程之二十一 Linux高并发web服务器开发
    Linux C编程之二十 xml-json
    Linux C编程之十九(2) libevent
    Linux C编程之十九(1) libevent基本概念
    Linux C编程之八 文件操作相关函数
    Linux C编程之七(2) 系统IO函数
    Linux C编程之六 makefile项目管理
    Linux C编程之四 动态库(共享库)的制作
    Linux C编程之五 gdb调试
    .net core 3.1 mvc string接收为null解决方案
  • 原文地址:https://www.cnblogs.com/huangting/p/11013347.html
Copyright © 2011-2022 走看看