在上一篇博客中 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获得角色,然后通过角色获得权限进行展示。
但这种方式也有不好的地方,就是当一个用户要有过多的权限的时候,这种方式就限制了操作,
所以也有更好的权限划分方法,大部分市面上的项目都是这种方法。有兴趣的同学百度搜索。
谢谢大家,若有疑问可联系博主!