Java全栈开发---Java ERP系统开发:商业ERP(十四)ERP系统的权限分配

在这里插入图片描述

//查询出所有的菜单

Menu root = menuDao.get(“0”);

Tree t1 = null;

Tree t2 = null;

//一级菜单

for(Menu m:root.getMenus()) {

t1 = new Tree();

t1.setId(m.getMenuid());

t1.setText(m.getMenuname());

//二级菜单

for(Menu m2 : m.getMenus()) {

t2 = new Tree();

t2.setId(m2.getMenuid());

t2.setText(m2.getMenuname());

//如果角色下包含有这个权限菜单,让其勾选

if(roleMenus.contains(m2)) {

t2.setChecked(true);

}

t1.getChildren().add(t2);

}

treeList.add(t1);

}

2)修改RoleAction

在这里插入图片描述

/*

  • 获取角色菜单权限

*/

public void readRoleMenus() {

List menus = roleBiz.readRoleMenus(getId());

write(JSON.toJSONString(menus));

}

3)修改roleMenuSet.js

在这里插入图片描述

$(function(){

$(‘#tree’).tree({

url:‘role_readRoleMenus?id=1’,

animate:true,

checkbox:true

})

});

再次访问

在这里插入图片描述

03、级联显示角色菜单
1)修改roleMenuSet.html

在这里插入图片描述

角色权限设置

href=“ui/themes/default/easyui.css”>

    2)修改roleMenuSet.js

    在这里插入图片描述

    $(function(){

    $(‘#tree’).tree({

    animate:true,

    checkbox:true

    })

    $(‘#grid’).datagrid({

    url:‘role_list’,

    columns:[[

    {field:‘uuid’,title:‘编号’,width:‘100’},

    {field:‘name’,title:‘名称’,width:‘100’}

    ]],

    singleSelect:true,

    onClickRow:function(rowIndex,rowData){

    $(‘#tree’).tree({

    url:‘role_readRoleMenus?id=’+rowData.uuid,

    animate:true,

    checkbox:true

    })

    }

    })

    });

    04、角色菜单提交保存
    1)修改IRoleBiz和RoleBiz

    IRoleBiz

    在这里插入图片描述

    package com.itzheng.erp.biz;

    import java.util.List;

    import com.itzheng.erp.entity.Role;

    import com.itzheng.erp.entity.Tree;

    /**

    • 角色业务逻辑层接口

    • @author Administrator

    */

    public interface IRoleBiz extends IBaseBiz{

    //获取角色菜单权限

    //uuid 角色编号

    List readRoleMenus(Long uuid);

    /*

    • 更新角色权限

    • uuid角色编号

    • checkedStr 勾选中的菜单ID字符串,以逗号分隔

    */

    public void updateRoleMenus(Long uuid,String checkedStr);

    }

    RoleBiz

    在这里插入图片描述

    /*

    • 更新角色权限

    • uuid角色编号

    • checkedStr 勾选中的菜单ID字符串,以逗号分隔

    */

    public void updateRoleMenus(Long uuid,String checkedStr) {

    //得到角色信息,进入持久化状态,后的对对象的操作都会保存到数据库当中

    Role role = roleDao.get(uuid);

    //清除角色下的菜单权限(delete from role_menu where roleuuid=?)

    role.setMenus(new ArrayList

    ());

    String[] ids = checkedStr.split(“,”);

    Menu menu = null;

    for (String id : ids) {

    menu = menuDao.get(id);

    //保存角色下的菜单权限:insert into role_menu

    role.getMenus().add(menu);

    }

    }

    2)修改RoleAction

    在这里插入图片描述

    private String checkedStr;//勾选中的菜单ID字符串,以逗号分隔

    public String getCheckedStr() {

    return checkedStr;

    }

    public void setCheckedStr(String checkedStr) {

    this.checkedStr = checkedStr;

    }

    /*

    • 更新角色权限

    • uuid角色编号

    • checkedStr 勾选中的菜单ID字符串,以逗号分隔

    */

    public void updateRoleMenus() {

    try {

    roleBiz.updateRoleMenus(getId(), checkedStr);

    write(ajaxReturn(true, “更新成功”));

    } catch (Exception e) {

    write(ajaxReturn(false, “更新失败”));

    // TODO: handle exception

    e.printStackTrace();

    }

    }

    3)roleMenuSet.html

    在这里插入图片描述

    角色权限设置

    href=“ui/themes/default/easyui.css”>

      保存

      3)roleMenuSet.js

      在这里插入图片描述

      $(‘#btnSave’).bind(‘click’,function(){

      var nodes = $(‘#tree’).tree(‘getChecked’);

      var ids = new Array();

      $.each(nodes,function(i, node){

      ids.push(node.id);

      });

      //[1,2,3,4] => “1,2,3,4”

      var checkedStr = ids.join(‘,’);//把数组里的每个元都拼接上逗号

      //构建提交数据

      var formdata = {};

      //id赋值

      formdata.id= $(‘#grid’).datagrid(‘getSelected’).uuid;

      //选中的菜单ID

      formdata.checkedStr=checkedStr;

      //alert(JSON.stringify(formdata));

      $.ajax({

      url: ‘role_updateRoleMenus’,

      data:formdata,

      type:‘post’,

      dataType: ‘json’,

      success:function(rtn){

      $.messager.alert(‘提示’,rtn.message,‘info’);

      }

      });

      });

      4、用户角色设置

      (1)需求分析

      一个用户可以指定多个角色,实现思路与角色权限设置相同

      (2)代码实现
      1)业务层实现
      a、修改IEmpBiz和EmpBiz

      IEmpBiz

      在这里插入图片描述

      EmpBiz

      在这里插入图片描述

      EmpBiz

      在这里插入图片描述

      // 获取用户角色权限

      public List readEmpRoles(Long uuid) {

      List treeList = new ArrayList();

      //获取用户信息

      Emp emp = empDao.get(uuid);

      //获取用户下的角色列表

      List empRoles = emp.getRoles();

      //获取所有的角色列表

      List rolesList = roleDao.getList(null, null, null);

      Tree t1 = null;

      for(Role role : rolesList) {

      t1 = new Tree();

      //转换为String类型

      t1.setId(String.valueOf( role.getUuid()));

      t1.setText(role.getName());

      //判断其是否需要选中,用户是否拥有这个角色

      if(empRoles.contains(role)) {

      t1.setChecked(true);

      }

      treeList.add(t1);

      }

      return treeList;

      }

      // 更新用户角色

      public void updateEmpRoles(Long uuid, String checkedStr) {

      Emp emp = empDao.get(uuid);

      //清空该用户下的所有角色

      emp.setRoles(new ArrayList());

      String[] ids = checkedStr.split(“,”);

      Role role = null;

      for (String id : ids) {

      role = roleDao.get(Long.valueOf(id));

      //设置用户的角色

      emp.getRoles().add(role);

      }

      }

      b、 修改applicationContext_biz.xml

      在这里插入图片描述

      2)修改EmpAction

      在这里插入图片描述

      3)用户角色的设置前端页面,创建empRolesSet.html,和empRolesSet.js
      empRolesSet.html

      在这里插入图片描述

      用户角色设置

      href=“ui/themes/default/easyui.css”>

        保存

        empRolesSet.js

        在这里插入图片描述

        $(function(){

        $(‘#tree’).tree({

        animate:true,

        checkbox:true

        });

        $(‘#grid’).datagrid({

        url:‘emp_list’,

        columns:[[

        {field:‘uuid’,title:‘编号’,width:‘100’},

        {field:‘name’,title:‘名称’,width:‘100’}

        ]],

        singleSelect:true,

        onClickRow:function(rowIndex,rowData){

        $(‘#tree’).tree({

        url:‘emp_readEmpRoles?id=’+rowData.uuid,

        animate:true,

        checkbox:true

        });

        }

        });

        $(‘#btnSave’).bind(‘click’,function(){

        var nodes = $(‘#tree’).tree(‘getChecked’);

        var ids = new Array();

        $.each(nodes,function(i, node){

        ids.push(node.id);

        });

        //[1,2,3,4] => “1,2,3,4”

        var checkedStr = ids.join(‘,’);//把数组里的每个元素都拼接上逗号

        //构建提交数据

        var formdata = {};

        //id赋值

        formdata.id= $(‘#grid’).datagrid(‘getSelected’).uuid;

        //选中角色ID

        formdata.checkedStr=checkedStr;

        //alert(JSON.stringify(formdata));

        $.ajax({

        url: ‘emp_upateEmpRoles’,

        data:formdata,

        type:‘post’,

        dataType: ‘json’,

        success:function(rtn){

        $.messager.alert(‘提示’,rtn.message,‘info’);

        }

        });

        });

        });

        4)测试访问:http://localhost:8080/erp/empRolesSet.html

        在这里插入图片描述

        5、显示权限菜单

        (1)需要与实现思路

        要求:用户登陆后只显示他拥有的菜单,多对多关联查询:

        涉及到的实体类:

        用户 角色 菜单

        5个表的查询:

        根据用户ID查询该用户所拥有的菜单,多对多关联查询:

        用户(EMP) => 角色(ROLE)=> 菜单(MENU)

        HQL:

        select m from Emp e join e.roles r join r.menus m where e.uuid=?

        在这里插入图片描述

        (2)代码实现

        根据用户编号查询菜单列表

        1)修改IEmpDao和EmpDao创建getMenusByEmpuuid

        IEmpDao

        在这里插入图片描述

        EmpDao

        在这里插入图片描述

        2)业务层

        IEmpBiz

        在这里插入图片描述

        EmpBiz

        在这里插入图片描述

        @Override

        public List

        getMenusByEmpuuid(Long uuid) {

        return empDao.getMenusByEmpuuid(uuid);

        }

        3)EmpAction层

        在这里插入图片描述

        /*

        • 获取用户的菜单权限

        */

        public void getMenusByEmpuuid() {

        if (null != getLoginUser()) {

        List

        menuList = empBiz.getMenusByEmpuuid(getLoginUser().getUuid());

        write(JSON.toJSONString(menuList));

        }

        }

        测试访问http://localhost:8080/erp/emp_getMenusByEmpuuid

        返回如下结果

        在这里插入图片描述

        数据为数组,且全部是二级菜单,这种数据格式无法在页面加载成菜单

        4)根据权限显示菜单

        总结

        三个工作日收到了offer,头条面试体验还是很棒的,这次的头条面试好像每面技术都问了我算法,然后就是中间件、MySQL、Redis、Kafka、网络等等。

        • 第一个是算法

        关于算法,我觉得最好的是刷题,作死的刷的,多做多练习,加上自己的理解,还是比较容易拿下的。

        而且,我貌似是将《算法刷题LeetCode中文版》、《算法的乐趣》大概都过了一遍,尤其是这本

        《算法刷题LeetCode中文版》总共有15个章节:编程技巧、线性表、字符串、栈和队列、树、排序、查找、暴力枚举法、广度优先搜索、深度优先搜索、分治法、贪心法、动态规划、图、细节实现题

        最新出炉,头条三面技术四面HR,看我如何一步一步攻克面试官?

        《算法的乐趣》共有23个章节:

        最新出炉,头条三面技术四面HR,看我如何一步一步攻克面试官?

        最新出炉,头条三面技术四面HR,看我如何一步一步攻克面试官?

        • 第二个是Redis、MySQL、kafka(给大家看下我都有哪些复习笔记)

        基本上都是面试真题解析、笔记和学习大纲图,感觉复习也就需要这些吧(个人意见)

        最新出炉,头条三面技术四面HR,看我如何一步一步攻克面试官?

        • 第三个是网络(给大家看一本我之前得到的《JAVA核心知识整理》包括30个章节分类,这本283页的JAVA核心知识整理还是很不错的,一次性总结了30个分享的大知识点)

        最新出炉,头条三面技术四面HR,看我如何一步一步攻克面试官?

        pBiz.getMenusByEmpuuid(getLoginUser().getUuid());

        write(JSON.toJSONString(menuList));

        }

        }

        测试访问http://localhost:8080/erp/emp_getMenusByEmpuuid

        返回如下结果

        在这里插入图片描述

        数据为数组,且全部是二级菜单,这种数据格式无法在页面加载成菜单

        4)根据权限显示菜单

        总结

        三个工作日收到了offer,头条面试体验还是很棒的,这次的头条面试好像每面技术都问了我算法,然后就是中间件、MySQL、Redis、Kafka、网络等等。

        • 第一个是算法

        关于算法,我觉得最好的是刷题,作死的刷的,多做多练习,加上自己的理解,还是比较容易拿下的。

        而且,我貌似是将《算法刷题LeetCode中文版》、《算法的乐趣》大概都过了一遍,尤其是这本

        《算法刷题LeetCode中文版》总共有15个章节:编程技巧、线性表、字符串、栈和队列、树、排序、查找、暴力枚举法、广度优先搜索、深度优先搜索、分治法、贪心法、动态规划、图、细节实现题

        [外链图片转存中…(img-5pIqS5RJ-1714342480484)]

        《算法的乐趣》共有23个章节:

        [外链图片转存中…(img-6HQkSxuM-1714342480485)]

        [外链图片转存中…(img-Ykgz4qLv-1714342480485)]

        • 第二个是Redis、MySQL、kafka(给大家看下我都有哪些复习笔记)

        基本上都是面试真题解析、笔记和学习大纲图,感觉复习也就需要这些吧(个人意见)

        [外链图片转存中…(img-5SefoQAG-1714342480485)]

        • 第三个是网络(给大家看一本我之前得到的《JAVA核心知识整理》包括30个章节分类,这本283页的JAVA核心知识整理还是很不错的,一次性总结了30个分享的大知识点)

        [外链图片转存中…(img-F3lJc8cL-1714342480486)]

        本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

        • 26
          点赞
        • 15
          收藏
          觉得还不错? 一键收藏
        • 0
          评论

        “相关推荐”对你有帮助么?

        • 非常没帮助
        • 没帮助
        • 一般
        • 有帮助
        • 非常有帮助
        提交
        评论
        添加红包

        请填写红包祝福语或标题

        红包个数最小为10个

        红包金额最低5元

        当前余额3.43前往充值 >
        需支付:10.00
        成就一亿技术人!
        领取后你会自动成为博主和红包主的粉丝 规则
        hope_wisdom
        发出的红包
        实付
        使用余额支付
        点击重新获取
        扫码支付
        钱包余额 0

        抵扣说明:

        1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
        2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

        余额充值