easyui--权限管理

Posted ly-0919

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了easyui--权限管理相关的知识,希望对你有一定的参考价值。

1、权限目的:  

   是为了让不同的用户可以操作系统中不同资源
   直接点说就是不同的用户可以操作不同的菜单 
 
   核心:实现菜单权限的核心思想就是控制用户登录后台所传递的menuId(与树形菜单分类列段关联的用户信息列段)

 

2、二星权限设计(用户权限多对多)

2.1、执行数据库脚本

用户登录信息表t_easyui_user_version2

技术图片

用户菜单中间表t_easyui_usermenu

技术图片

 

菜单管理表请参照上一篇:easyUI--入门实例

 


2.2建立实体类  

 1 public class TreeNode 
 2   private String id;
 3   private String text;
 4   private  List<TreeNode> children=new ArrayList<TreeNode>();
 5   private  Map<String, Object> attributes=new HashMap<String, Object>();
 6   
 7   
 8 public String getId() 
 9     return id;
10 
11 
12 public void setId(String id) 
13     this.id = id;
14 
15 
16 public String getText() 
17     return text;
18 
19 
20 public void setText(String text) 
21     this.text = text;
22 
23 
24 public List<TreeNode> getChildren() 
25     return children;
26 
27 
28 public void setChildren(List<TreeNode> children) 
29     this.children = children;
30 
31 
32 public Map<String, Object> getAttributes() 
33     return attributes;
34 
35 
36 public void setAttributes(Map<String, Object> attributes) 
37     this.attributes = attributes;
38 
39 
40 @Override
41 public String toString() 
42     return "TreeNode [id=" + id + ", text=" + text + ", children=" + children + ", attributes=" + attributes + "]";
43 
44   
45 
46 

 

2.3创建dao  UserDao

package com.yuan.dao;

import java.sql.SQLException;
import java.util.List;
import java.util.Map;

import com.yuan.util.JsonBaseDao;
import com.yuan.util.JsonUtils;
import com.yuan.util.PageBean;
import com.yuan.util.StringUtils;

public class UserDao extends JsonBaseDao 

    /**
     * 用户登录或者查询用户分页信息的公共方法
     * @param paMap
     * @param pageBean
     * @return
     * @throws InstantiationException
     * @throws IllegalAccessException
     * @throws SQLException
     */
    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 +=" AND uid="+uid;
        
        if(StringUtils.isNotBlank(upwd)) 
            sql +=" AND upwd="+upwd;
        
        return super.executeQuery(sql, pageBean);
    
    
    /**
     * 根据当前用户登录的ID去查询对应的所菜单
     * @param paMap
     * @param pageBean
     * @return
     * @throws InstantiationException
     * @throws IllegalAccessException
     * @throws SQLException
     */
    public List<Map<String, Object>> getMenuByUid(Map<String, String[]> paMap,PageBean pageBean) throws InstantiationException, IllegalAccessException, SQLException
        String sql="SELECT * FROM t_easyui_usermenu WHERE TRUE ";
        String uid=JsonUtils.getParamVal(paMap, "uid");
        if(StringUtils.isNotBlank(uid)) 
            sql +=" AND uid="+uid;
        
        return super.executeQuery(sql, pageBean);
    
    
    

 

2.4修改原有的dao  MenuDao

主要修改是将listMap方法修改成listMapAuth,

.listMap方法只负责查询子节点,不包括本身

.listMapAuth方法可以查询子节点包括自身节点

package com.hmc.dao;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.hmc.entity.TreeNode;
import com.hmc.util.JsonBaseDao;
import com.hmc.util.JsonUtils;
import com.hmc.util.PageBean;
import com.hmc.util.StringUtils;

public class MenuDao extends JsonBaseDao 
    
    
    /**
     * 给前台tree_data1_json的字符串
     * @param paMap 从前台jsp传递过来的参数集合
     * @param pageBean
     * @return
     * @throws InstantiationException
     * @throws IllegalAccessException
     * @throws SQLException
     */
    public List<TreeNode> listTreeNode(Map<String, String[]> paMap,PageBean pageBean) throws InstantiationException, IllegalAccessException, SQLException
       List<Map<String, Object>> listMap = this.listMapAuth(paMap, pageBean);
       List<TreeNode> listTreeNode=new ArrayList<TreeNode>();
       this.listMapToListTreeNode(listMap, listTreeNode);
       return listTreeNode;
    
    
//    public List<Map<String, Object>> listMap(Map<String, String[]> paMap,PageBean pageBean) throws InstantiationException, IllegalAccessException, SQLException
// String sql
="SELECT * FROM t_easyui_menu WHERE TRUE"; // String menuId=JsonUtils.getParamVal(paMap, "Menuid"); // if(StringUtils.isNotBlank(menuId)) // sql+=" AND parentid="+menuId; // // else // sql+=" AND parentid=-1"; // // // //这里面存放的是数据库中的菜单信息 // List<Map<String, Object>> listMap = super.executeQuery(sql, pageBean); // return listMap; // // public List<Map<String, Object>> listMapAuth(Map<String, String[]> paMap,PageBean pageBean) throws InstantiationException, IllegalAccessException, SQLException String sql="SELECT * FROM t_easyui_menu WHERE TRUE"; String menuId=JsonUtils.getParamVal(paMap, "Menuid"); if(StringUtils.isNotBlank(menuId)) sql+=" AND menuId in ("+menuId+")"; else sql+=" AND menuId=001"; //这里面存放的是数据库中的菜单信息 List<Map<String, Object>> listMap = super.executeQuery(sql, pageBean); return listMap; /** * ‘Menuid‘:001,‘Menuame‘:‘学生管理‘ * id:..,text:... * @param map * @param treeNode * @throws InstantiationException * @throws IllegalAccessException * @throws SQLException */ private void MapToTreeNode(Map<String, Object> map,TreeNode treeNode) throws InstantiationException, IllegalAccessException, SQLException treeNode.setId(map.get("Menuid")+""); treeNode.setText(map.get("Menuname")+""); treeNode.setAttributes(map); // 将子节点添加到父节点当中,建立数据之间的父子关系 // treeNode.setChildren(children); Map<String, String[]> childrenMap=new HashMap<>(); childrenMap.put("Menuid", new String[]treeNode.getId()); List<Map<String, Object>> listMap = this.listMap(childrenMap, null); List<TreeNode>listTreeNode=new ArrayList<>(); this.listMapToListTreeNode(listMap, listTreeNode); treeNode.setChildren(listTreeNode); /** * [‘Menuid‘:001,‘Menuame‘:‘学生管理‘,‘Menuid‘:002,‘Menuame‘:‘后勤管理‘] * @param listMap * tree_data1_json * @param listTreeNode * @throws SQLException * @throws IllegalAccessException * @throws InstantiationException */ private void listMapToListTreeNode (List<Map<String, Object>> listMap,List<TreeNode> listTreeNode) throws InstantiationException, IllegalAccessException, SQLException TreeNode treeNode=null; for (Map<String, Object> map : listMap) treeNode=new TreeNode(); MapToTreeNode(map, treeNode); listTreeNode.add(treeNode);

 

2.5新增web的方法

 

package com.yuan.web;

import java.sql.SQLException;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.yuan.dao.UserDao;
import com.***.framework.ActionSupport;

public class UserAction extends ActionSupport 
    
    private UserDao userDao = new UserDao();
    /**
     * 登录成功后跳转index.jsp
     * @param request
     * @param response
     * @return
     */
    public String login(HttpServletRequest request,HttpServletResponse response) 
//        系统中是否有当前登录用户
        Map<String, Object> map = null;
        try 
            map = this.userDao.list(request.getParameterMap(), null).get(0);
         catch (Exception e) 
            request.setAttribute("msg", "用户不存在");
            return "login";
        
        try 
            //有就查询用户菜单中间表,获取对应menuid的集合
            if(map!=null&&map.size()>0) 
                //得到[Menuid:002,...,Menuid:003,...]
                //截成002,003
                StringBuilder sb= new StringBuilder();
                List<Map<String, Object>> menuByUid = this.userDao.getMenuByUid(request.getParameterMap(), null);
                for (Map<String, Object> m : menuByUid) 
                    sb.append(","+m.get("menuId"));
                
                request.setAttribute("menuIds", sb.substring(1));
                 return "index";
            else 
                //没有就重新跳回登陆界面,并提示用户不存在
                request.setAttribute("msg", "用户不存在");
                 return "login";
            
         catch (InstantiationException | IllegalAccessException | SQLException e) 
            // TODO Auto-generated catch block
            e.printStackTrace();
             return "login";
        
        
         
    

 

2.6新增登入界面,跳入前端树形菜单

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="$pageContext.request.contextPath /userAction.action?methodName=login" method="post">
   uid:<input type="text" name="uid">
   upwd:<input type="text" name="upwd">
   <input type="submit">
   <span style="color:red;">$msg </span>
</form>
</body>
</html>

 

页面比较简单,可自行优化。

 

2.7修改js代码  index.js

$(function()
    $(‘#tt‘).tree(    
        url:‘menuAction.action?methodName=menuTree&&Menuid=‘+$("#menuIds").val(), 
        onClick: function(node)
//            alert(node.text);//在用户点击的时候提示
            // add a new tab panel    
            var content = ‘<iframe scrolling="no" frameborder="0" src="‘+node.attributes.menuURL+‘" width="99%" height="99%"></iframe>‘;
            if($(‘#menuTab‘).tabs(‘exists‘,node.text))
                //存在则执行选项卡选中已有选项卡的操作
                $(‘#menuTab‘).tabs(‘select‘,node.text);
                
            else
                $(‘#menuTab‘).tabs(‘add‘,    
                    //不存在执行新增的操作
                    title:node.text,    
                    content:content,    
                    closable:true,    
                );  
            

        
    );  

)

在修改url时需要在原有的index.jsp页面添加一行接受web层传过来的用户登录时的menuid  代码

<input type="hidden" id="menuIds" value="$menuIds " >

 

2.8配置mvc.xml文件

 

<?xml version="1.0" encoding="UTF-8"?>
<config>
    <!-- <action path="/regAction" type="test.RegAction">
        <forward name="failed" path="/reg.jsp" redirect="false" />
        <forward name="success" path="/login.jsp" redirect="true" />
    </action> -->
    
    <action path="/menuAction" type="com.yuan.web.MenuAction">
    </action>
    <action path="/userAction" type="com.yuan.web.UserAction">
      <forward name="index" path="/index.jsp" redirect="false"></forward>
      <forward name="login" path="/login.jsp" redirect="false"></forward>
    </action>
    
</config>

 

3、运行结果

3.1登录界面

技术图片

3.2  001用户登入

技术图片

 

3.3  002用户登入

技术图片

 

3.3  003用户登入

技术图片

 

3.4  000用户登入

技术图片

 

谢谢观看^-^ !!!

 

以上是关于easyui--权限管理的主要内容,如果未能解决你的问题,请参考以下文章

Easyui后台管理角色权限控制

SpringMVC+Spring Data JPA+Shiro+EasyUI简单权限管理系统

jfinal3.0+easyui1.4.4后台权限管理系统 [2017.2.11 更新]

springboot+easyui+jpa实现动态权限角色的后台管理系统

jfinal2.2+easyui1.4.4后台权限管理系统 [2016.05.27 更新]

Asp.Net Mvc通用后台管理系统,bootstrap+easyui+权限管理+ORM