easyui实现登陆权限管理


在上一篇博客中 easyui介绍与组件运用 的案例中。介绍了树形菜单。
在很多的企业或者项目中,都会运用到权限的划分,
若使用servlet实现权限划分都非常麻烦,所有这里通过easyui的树形控件也是可以实现权限的划分。

更改查询menu

在上一篇的博客中,listMenu()这个方法的 String id =JsonUtils.getParamVal(map, “id”)这一句并没有运用到,直接查找的是所有的目录。

public List<Map<String, Object>> listMenu(Map<String, String[]> map,PageBean pagebean) throws InstantiationException, IllegalAccessException, SQLException{
		String sql = "select * from t_easyui_menu where 1=1 ";
		String id =JsonUtils.getParamVal(map, "id");
		if(StringUtils.isNotBlank(id)) {
			sql = sql+" and parentid = "+id;
		}else {
			sql = sql+" and parentid = -1";
		}
		return super.executeQuery(sql, pagebean);
	}

这并没有做到动态划分权限,所以第一步需要的是在这原来的基础上进行更改。

与之不同的地方,在于查找这个子目录的之前,要先查找你jsp界面传过来的根目录为那些,再根据这些根目录查找子目录。
所以要编写一个方法先查找根目录:

	public List<Map<String, Object>> listMenuSef(Map<String, String[]> map,PageBean pagebean) throws InstantiationException, IllegalAccessException, SQLException{
		String sql = "select * from t_easyui_menu where 1=1 ";
		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);
	}

调用的方法中也要更改为先调用查找根目录的。之后再会根据顺序调用查询子目录。

public List<TreeNode> list(Map<String, String[]> map,PageBean pagebean) throws Exception{
		List<Map<String, Object>> listMenu = this.listMenuSef(map, pagebean);
		List<TreeNode> treeNodeList = new ArrayList<>();
		menuList2TreeNodeList(listMenu, treeNodeList);
		return treeNodeList;
	}

方法写完后,只需把参数改为动态接受就行了。

登陆传值

一般是查找用户权限的话是通过登陆界面查找的,
所以先创建登陆的方法以及根据id查找权限的方法,以获得要展示的目录。

查看是否登陆成功:

	public List<Map<String, Object>> List(Map<String, String[]> paMap,PageBean pageBean) throws Exception {
		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 Exception {
		String sql = "select * from t_easyui_usermenu where 1=1 ";
		if(StringUtils.isNotBlank(uid)) {
			sql = sql+" and uid = "+uid;
		}
		return super.executeQuery(sql, pageBean);
	}

然后通过action,把查找到的值传到jsp页面,

	public String login(HttpServletRequest req,HttpServletResponse resp) throws Exception {
		List<Map<String, Object>> list = userDao.List(req.getParameterMap(), null);
		if(list!=null&&list.size()>0) {
			List<Map<String, Object>> listMenu = userDao.listMenu(req.getParameter("uid"), null);
			StringBuilder sb = new StringBuilder();
			for (Map<String, Object> map : listMenu) {
				sb.append(map.get("menuId"));
			}
			req.setAttribute("menuid", sb.substring(1));
		}else {
			return "login";
		}
		return "index";
	}

再通过隐藏域传值到js文件中,因为js是不支持${}这种域传值的,但接收id获值,所以得给隐藏域设置id:

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

在js文件中运用$(’#id’)获值。传到处理数据页面。

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

这样就可以通过数据库来动态获取权限来展示啦~
在这里插入图片描述
这种划分权限的方法被大家认定为2星划分权限,(用户权限多对多)

这种划分权限的方法的缺点就是,若有很多人的话,通过用户ID查找权限的表中就会有很多的数据,这样数据会很多。
所以有比这完善的权限划分,

就是在创建一个角色表,在登陆界面中,通过ID获得角色,然后通过角色获得权限进行展示。

但这种方式也有不好的地方,就是当一个用户要有过多的权限的时候,这种方式就限制了操作,
所以也有更好的权限划分方法,大部分市面上的项目都是这种方法。有兴趣的同学百度搜索。

谢谢大家,若有疑问可联系博主!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值