easyui权限管理

 在easyui上实现权限的管理

所谓权限:指的是系统中的资源,资源包括菜单资源(学习情况报表,账号审核...)以及按钮资源
所谓角色:指的是系统中的权限集合(每一个角色对应着哪些权限集合)

1、一星权限设计(用户权限多对一)
?执行数据库脚本sql
?建立实体类
?创建dao方法
?Webservlet层创建
?展示对应的树形菜单

实现思路:通过账号和密码查询 是为了获取菜单的id 获取到里面的menuid后 可加载对应的菜单或以及子菜单

弊端:一个菜单不能对应多个用户!

 

2、二星权限设计(用户权限多对多)
?执行数据库脚本
?修改原有的实体类
?建立实体类
?创建dao
?修改原有的dao
?新增web的方法
?新增登入界面,跳入前端树形菜单

实现思路:用户查询登陆表 有数据代表已注册 通过uid 查到中间表(一个uid查中间表的方法) 获取到一个权限集合 对应多个数据 再进行遍历uid查到的集合  然后拼接每一个map集合的menuid(这个menuid的集合就是那些数字 方法用in可得到多组父子关系)

 

首先我们先建立三张表

1用户表(t_easyui_user_version2)

2.用户菜单中间表(t_easyui_usermenu)

3.菜单表(t_easyui_menu)

写一个登录界面

1 <body>
2 <form action="${pageContext.request.contextPath }/userAction.action?methodName=login" method="post">
3     uid:<input type="text" name="uid"><br>
4     upwd:<input type="text" name="upwd"><br>
5     <input type="submit" ><br>
6 </form>
7 </body>

写一个dao方法来验证登录

 1 package com.liuwenwu.dao;
 2 
 3 import java.sql.SQLException;
 4 import java.util.List;
 5 import java.util.Map;
 6 
 7 import com.liuwenwu.util.JsonBaseDao;
 8 import com.liuwenwu.util.JsonUtils;
 9 import com.liuwenwu.util.PageBean;
10 import com.liuwenwu.util.StringUtils;
11 
12 public class UserDao extends JsonBaseDao {
13 
14     /**
15      * 登录 查询用户表
16      * @return
17      * @throws SQLException 
18      * @throws IllegalAccessException 
19      * @throws InstantiationException 
20      */
21     public List<Map<String, Object>> list(Map<String, String[]> paMap,PageBean pageBean) throws InstantiationException, IllegalAccessException, SQLException{
22         String sql="select * from t_easyui_user_version2 where true";
23         String uid=JsonUtils.getParamVal(paMap, "uid");
24         String upwd=JsonUtils.getParamVal(paMap, "upwd");
25         if(StringUtils.isNotBlank(uid)) {
26             sql=sql+" and uid="+uid;
27         }
28         if(StringUtils.isNotBlank(upwd)) {
29             sql=sql+" and upwd="+upwd;
30         }
31         return super.executeQuery(sql, pageBean);
32     }

写一个dao方法根据用户ID来查询用户对应的权限

 1 /**
 2      * 通过中间表查询登录用户所对应的权限
 3      * @param paMap
 4      * @param pageBean
 5      * @return
 6      * @throws InstantiationException
 7      * @throws IllegalAccessException
 8      * @throws SQLException
 9      */
10     public List<Map<String, Object>> listMenu(String uid,PageBean pageBean) throws InstantiationException, IllegalAccessException, SQLException{
11         String sql="select * from t_easyui_usermenu where true";
12         if(StringUtils.isNotBlank(uid)) {
13             sql=sql+" and uid="+uid;
14         }
15         return super.executeQuery(sql, pageBean);
16     }

写一个web层自控制器来调用dao方法

 1 package com.liuwenwu.web;
 2 
 3 import java.sql.SQLException;
 4 import java.util.List;
 5 import java.util.Map;
 6 
 7 import javax.servlet.http.HttpServletRequest;
 8 import javax.servlet.http.HttpServletResponse;
 9 
10 import com.liuwenwu.dao.UserDao;
11 import com.zking.framework.ActionSupport;
12 
13 public class UserAction extends ActionSupport {
14 
15     private UserDao userDao=new UserDao();
16     
17     public String login(HttpServletRequest req,HttpServletResponse resp){
18         try {
19             List<Map<String, Object>> list=this.userDao.list(req.getParameterMap(), null);
20             if(list!=null&&list.size()>0) {
21                 List<Map<String, Object>> listMenu=this.userDao.listMenu(req.getParameter("uid"), null);
22                 StringBuilder sb=new StringBuilder();
23                 for (Map<String, Object> map : listMenu) {
24                     sb.append(","+map.get("menuId"));
25                 }
26                 // ,001,002
27                 req.setAttribute("menuHid", sb.substring(1));
28             }else {
29                 return"login";
30             }
31         } catch (Exception e) {
32             // TODO Auto-generated catch block
33             e.printStackTrace();
34         } 
35         
36         return "index";
37     }
38     
39 }

配置MVC文件

1 <action path="/menuAction" type="com.liuwenwu.web.MenuAction">
2         <forward name="index" path="/index.jsp" redirect="false" />
3     </action>
4     
5     <action path="/userAction" type="com.liuwenwu.web.UserAction">
6         <forward name="index" path="/index.jsp" redirect="false" />
7     </action>

 

在昨天的tree结构展示dao里面加一个方法

  1 package com.liuwenwu.dao;
  2 
  3 import java.sql.SQLException;
  4 import java.util.ArrayList;
  5 import java.util.HashMap;
  6 import java.util.List;
  7 import java.util.Map;
  8 
  9 import com.liuwenwu.entity.TreeNode;
 10 import com.liuwenwu.util.JsonBaseDao;
 11 import com.liuwenwu.util.JsonUtils;
 12 import com.liuwenwu.util.PageBean;
 13 import com.liuwenwu.util.StringUtils;
 14 
 15 public class MenuDao extends JsonBaseDao {
 16 
 17     /**
 18      * @param map   req.getParameterMap
 19      * @param pageBean  分页
 20      * @return
 21      * @throws Exception 
 22      */
 23     public List<TreeNode> list(Map<String, String[]> map,PageBean pageBean) throws Exception{
 24         List<Map<String, Object>> listMenu=this.listMenuSef(map, pageBean);
 25         List<TreeNode> treeNodeList=new ArrayList<>();
 26         menuList2TreeNodeList(listMenu, treeNodeList);
 27         return treeNodeList;
 28     }
 29     
 30     public List<Map<String, Object>> listMenuSef(Map<String, String[]> map,PageBean pageBean)throws Exception{
 31         String sql=" select * from t_easyui_menu where true";
 32         String id=JsonUtils.getParamVal(map, "menuHid");
 33         if(StringUtils.isNotBlank(id)) {
 34             sql=sql +" and menuid in("+id+")";    
 35         }
 36         else {
 37             sql=sql+" and menuid =-1";
 38         }
 39         
 40         return super.executeQuery(sql, pageBean);
 41         
 42     }
 43 
 44     /**
 45      * 查询Menu表的数据
 46      * @param map
 47      * @param pageBean
 48      * @return
 49      */
 50     public List<Map<String, Object>> listMenu(Map<String, String[]> map,PageBean pageBean)throws Exception{
 51         String sql=" select * from t_easyui_menu where true";
 52         String id=JsonUtils.getParamVal(map, "id");
 53         if(StringUtils.isNotBlank(id)) {
 54             sql=sql +" and parentid ="+id;    
 55         }
 56         else {
 57             sql=sql+" and parentid =-1";
 58         }
 59         
 60         return super.executeQuery(sql, pageBean);    
 61     }
 62     
 63     /**
 64      * {Menuid:1,....[]}
 65      * ->{id:1,....[]}
 66      * menu表的数据不符合easyui树形展示的数据格式
 67      * 需要转换成easyui所能识别的数据格式
 68      * @param map
 69      * @param reTreeNode
 70      * @throws Exception 
 71      */
 72     private void menu2TreeNode(Map<String, Object> map, TreeNode treeNode) throws Exception {
 73         treeNode.setId(map.get("Menuid").toString());
 74         treeNode.setText(map.get("Menuname").toString());
 75         treeNode.setAttributes(map);
 76         
 77         Map<String, String[]> jspMap=new HashMap<>();
 78         jspMap.put("id", new String[] {treeNode.getId()});
 79         this.listMenu(jspMap, null);
 80         List<Map<String, Object>> listMenu=this.listMenu(jspMap, null);
 81         List<TreeNode> treeNodeList=new ArrayList<>();
 82         menuList2TreeNodeList(listMenu, treeNodeList);
 83         treeNode.setChildren(treeNodeList);
 84     }
 85     
 86 
 87     /**
 88      * [{Menuid:1,....[]},{Menuid:2,....[]}]
 89      * ->[{id:1,....[]},{id:2,....[]}]
 90      * @param mapList
 91      * @param treeNodeList
 92      * @throws Exception
 93      */
 94     private void menuList2TreeNodeList(List<Map<String, Object>> mapList, List<TreeNode> treeNodeList)throws Exception {
 95         TreeNode treeNode =null;
 96         for (Map<String, Object> map : mapList) {
 97             treeNode =new TreeNode();
 98             menu2TreeNode(map, treeNode);
 99             treeNodeList.add(treeNode);        
100         }    
101     }
102     
103 }

实现效果:001用户可查看 学生管理

 

002用户可查看 后勤管理和房屋租金

 

转载于:https://www.cnblogs.com/liuwenwu9527/p/11012950.html

阅读目录 1.1 编写目的 1.2 是否开源 1.1 基于RBAC 1.2 数据模型 1.1 登录 1.2 资源信息维护 1.3 角色管理 1.4 组管理 1.5 系统字典维护 1.6 系统信息维护 1.7 日志管理 1.8 操作信息维护 1.9 全局参数维护 1.10 人员信息维护 第一章 引言 1.1 编写目的 使用easyui+ssh2+shiro的权限管理系统,粒度可细化到按钮及菜单级别。目前是第一个稳定版本,可实现基本的权限控制功能,并且可以使用shiro的标签对细粒度的权限进行管理。 Jar包除了几个核心包之外全部使用maven管理。 回到顶部 1.2 是否开源 完全开源免费。 第一章 设计思路 回到顶部 1.1 基于RBAC RBAC认为权限授权实际上是Who、What、How的问题。在RBAC模型中,who、what、how构成了访问权限三元组,也就是“Who对What(Which)进行How的操作”。 Who:权限的拥用者或主体(如Principal、User、Group、Role、Actor等等) What:权限针对的对象或资源(Resource、Class)。 How:具体的权限(Privilege,正向授权与负向授权)。 Operator:操作。表明对What的How操作。也就是Privilege+Resource Role:角色,一定数量的权限的集合。权限分配的单位与载体,目的是隔离User与Privilege的逻辑关系. Group:用户组,权限分配的单位与载体。权限不考虑分配给特定的用户而给组。组可以包括组(以实现权限的继承),也可以包含用户,组内用户继承 组的权限。User与Group是多对多的关系。Group可以层次化,以满足不同层级权限控制的要求。 RBAC的关注点在于Role和User, Permission的关系。称为User assignment(UA)和Permission assignment(PA).关系的左右两边都是Many-to-Many关系。就是user可以有多个role,role可以包括多个user。 回到顶部 1.2 数据模型 第一章 系统操作 回到顶部 1.1 登录 部署完成后需要输入: http://localhost:8080/sshpermission 进入登录界面 输入管理员 用户名:admin 密码:admin 进入系统 回到顶部 1.2 资源信息维护 维护系统的资源信息,资源指的是系统中所有的除按钮外的相关信息,比如菜单,首页显示列表等。 回到顶部 1.3 角色管理 维护系统角色信息,可对系统进行分配资源授权和操作授权。 角色维护 资源分配 操作分配 回到顶部 1.4 组管理 维护一组用户的信息,可以跟角色和用户进行组合。可以向组内添加用户,可以给组添加角色。 向组内添加用户 给组授权角色 回到顶部 1.5 系统字典维护 维护系统内的字典数据。 回到顶部 1.6 系统信息维护 维护系统信息,可以设置多个系统,进行多个系统的维护与授权。 回到顶部 1.7 日志管理 维护系统日志,使用AOP进行记录,可对需要维护的部分进行配置。 回到顶部 1.8 操作信息维护 维护操作信息 回到顶部 1.9 全局参数维护 维护全局参数。 回到顶部 1.10 人员信息维护 维护用户的基本信息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值