EasyUI+JavaWeb奖助学金管理系统[16]-权限管理功能的开发

简介: 本文目录1. 本章任务2. 页面布局3. 加载角色对应的菜单4. 提交角色菜单信息5. 小结

1. 本章任务

之前已经实现了登录、项目管理、机构管理、用户管理,本篇来实现下权限管理的功能。


所谓权限管理,在本系统中还是比较简单的,就是某角色所能访问的菜单列表。注意角色与菜单是多对多的关系,即一个角色可以对应对个菜单,一个菜单也可以对应多个角色。


权限管理的对应关系保存在表rolemenu中。


本篇就来实现权限管理,通过下拉框选择一个角色,然后通过表格显示选中角色拥有的菜单信息,在表格中可以选择多个菜单,然后点击提交按钮可以保存角色-菜单对应。


效果图如下:

image.png

2. 页面布局

添加角色下拉框、提交按钮、菜单表格,其中菜单表格负责显示角色下拉框对应的菜单列表。


注意我们并未给数据表格设置url,这是因为需要在下拉框选项变化时,动态的为表格加载数据。另外表格中的复选框是根据返回数据中checked值决定是否选中的(true选中false不选中)。

  <body>
    <div class="tool-box">
      <select id="input-role" class="easyui-combobox" style="width: 200px;" data-options="onChange:onChangeRole">
        <option value="-1">请选择角色</option>
        <option value="schoolmaster">学校管理员</option>
        <option value="collegemaster">学院管理员</option>
        <option value="classmaster">班主任</option>
        <option value="student">学生</option>
      </select>
      <a id="btn" onclick="btnSubmitClick()" href="#" class="easyui-linkbutton" data-options="iconCls:'icon-add'">提交</a>
    </div>
    <table id="mainTable" title="角色对应菜单列表" class="easyui-datagrid" fitColumns="true">
      <thead>
        <tr>
          <th data-options="field:'checked',width:50" checkbox="true"></th><!-- 复选框 -->
          <th data-options="field:'id',width:50">序号</th>
          <th data-options="field:'name',width:50">名称</th>
          <th data-options="field:'path',width:100">访问路径</th>
        </tr>
      </thead>
    </table>
  </body>
3. 加载角色对应的菜单
当页面初始化,或者下拉框选择发生变化时,我们将角色id发送给后端,后端根据角色返回相应的菜单列表。
注意角色拥有的那些菜单项,其checked属性值应为true,这样在表格中就会显示选中效果。
首先为Menu类添加一个checked属性。
  /**
 * 菜单
 */
public class Menu {
  private String id;
  private String name;
  private String path;
  /**
   * 冗余字段,用于返回是否选中信息
   */
  private boolean checked;
}
在页面初始化,以及下拉框选中变化时,触发加载表格数据方法。
    // 初始化
    $(function() {
      loadTableData();
    });
    // 选中项变化
    function onChangeRole() {
      loadTableData();
    }
    // 加载表格数据
    function loadTableData() {
      var param = {
        role: $("#input-role").combobox("getValue")
      };
      console.log("#param:", param);
      $.ajax({
        url: "CoreServlet?method=getMenusByRole",
        type: "post",
        dataType: "json",
        data: param,
        success: function(res) {
          if (res.code == 0) {
            console.log("## res:", res);
            $("#mainTable").datagrid("loadData", res); //动态取数据
          } else { //提示错误信息
            alert(res.msg);
          }
        },
      });
    }
后端根据角色返回对应数据,修改RoleMenuDao:
  /**
   * 通过角色获取菜单
   */
  public List<Menu> getMenusByRole(String role) throws Exception {
    // 全部菜单
    MenuDao menuDao = new MenuDao();
    List<Menu> allMenus = menuDao.getAll();
    // 角色对应的菜单(应选中的)
    Connection conn = ConnectionUtils.getConnection();
    String sql = "select * from menu where id in (select menuId from rolemenu where role=?)";
    QueryRunner runner = new QueryRunner();
    Object[] params = { role };
    List<Menu> selectedMenus = runner.query(conn, sql, new BeanListHandler<Menu>(Menu.class), params);
    ConnectionUtils.releaseConnection(conn);
    // 选中
    for (Menu one : allMenus) {
      for (Menu selected : selectedMenus) {
        if (one.getId().equals(selected.getId())) {
          one.setChecked(true);
          break;
        }
      }
    }
    return allMenus;
  }
4. 提交角色菜单信息
当点击提交按钮时,将当前角色信息及选中的菜单列表提交到后端进行更新。
修改js代码:
    // 提交修改
    function btnSubmitClick() {
      if ($("#input-role").combobox("getValue") == "-1") {
        alert("请先选择角色!");
        return;
      }
      // 获取选中项
      var checkedItems = $("#mainTable").datagrid("getChecked");
      // 选中菜单的id数组
      var ids = [];
      $.each(checkedItems, function(i, v) {
        ids.push(v.id);
      });
      var param = {
        role: $("#input-role").combobox("getValue"),
        ids: ids.join(","),
      };
      $.ajax({
        url: "CoreServlet?method=submitMenusByRole",
        type: "post",
        dataType: "json",
        data: param,
        success: function(res) {
          if (res.code == 0) {
            alert("提交成功!");
          } else { //提示错误信息
            alert(res.msg);
          }
        },
      });
    }
后端进行相应处理:
  /**
   * 提交权限
   */
  public void submitMenusByRole(String role, String[] menuIds) throws Exception {
    // 先删除角色对应所有菜单
    Connection conn = ConnectionUtils.getConnection();
    String sql = "delete from rolemenu where role =?";
    Object[] params = { role };
    QueryRunner runner = new QueryRunner();
    runner.update(conn, sql, params);
    // 然后逐一新增rolemenu
    for (String menuId : menuIds) {
      RoleMenu one = new RoleMenu();
      one.setMenuId(menuId);
      one.setRole(role);
      this.insert(one);
    }
    ConnectionUtils.releaseConnection(conn);
  }
5. 小结
完整版的代码可以从GitHub上查看,此处就不再逐一粘贴了。
相关文章
|
8月前
基于EasyUI的后台管理系统页面原型_示例图_下载地址
基于EasyUI的后台管理系统页面原型_示例图_下载地址
57 0
|
数据库
22EasyUI 数据网格- 添加查询功能
22EasyUI 数据网格- 添加查询功能
52 0
|
数据可视化 安全 Java
【项目源码】基于spring boot+mybatis+easyui开发的质量溯源系统
粮油溯源系统是从种植到加工、包装、库存、物流、销售、售出、异常反馈的全流程可视化质量溯源系统。技术架构:spring boot+mybatis+easyui+mysql
175 0
【项目源码】基于spring boot+mybatis+easyui开发的质量溯源系统
|
Java 关系型数据库 MySQL
Eclipse+Java+SSM+Easyui实现网上考试系统
Eclipse+Java+SSM+Easyui实现网上考试系统
170 0
Eclipse+Java+SSM+Easyui实现网上考试系统
|
安全 数据安全/隐私保护
EasyUI+JavaWeb奖助学金管理系统[20]-项目总结与展望
本文目录 1. 总结 1.1 管理员新增奖助学金项目 1.2 学生发起申请 1.3 班主任审批 1.4 学院管理员审批 1.5 学校管理员审批 1.6 学生查看申请结果 2. 展望
191 0
EasyUI+JavaWeb奖助学金管理系统[20]-项目总结与展望
|
前端开发
EasyUI+JavaWeb奖助学金管理系统[19]-奖助学金审批功能开发
本文目录 1. 本章任务 2. 查看当前待审批的申请 3. 审批功能的开发 4. 总结
213 0