基于权限基础表建立,权限基础数据操作。
简单叙述下流程:
登录账号:获取当前账号绑定的role,根据role获取此role关联的action,action为菜单的时候怎么做,为按钮的时候怎么做。
此处介绍一种最简单的方法仅供参考。
第一步 登录
流程:
前台:
1.发送账号密码到action(各种验证不再讲述)
actiong层
1.根据账号密码进行查询
2.获取role 保存到session
3.获取action 保存到session
4.登录失败提示
public String login() { String r = ""; T_user u = service.getByHql("from T_user where t_name='" + data.getT_name() + "'and t_password='" + data.getT_password() + "'"); if (u != null) { Set<T_role> roles = u.getRole(); for (Iterator<T_role> iterator = roles.iterator(); iterator .hasNext();) { T_role role = iterator.next(); getSession().setAttribute("role", role.getName()); getSession().setAttribute("roleid", role.getId()); Set<Menu> menu = role.getMenu(); List<Menu> list = new ArrayList<Menu>(menu); getSession().setAttribute("action", list); } r = "login"; } else { r = "loginOut"; } return r; }
这样的话就将所有action保存了到了session中(此处没有加按钮,以后会做一份优化的,此时没有时间)
然后权限菜单树根据角色生成不同的菜单
前台
1.easyui异步树
action层
1.获取角色Id
2.根绝角色id查关联节点
3.生成异步树
//获取当前角色的权限树 public void getRoleTree() { String roleId=(String) getSession().getAttribute("roleid"); JSONArray jsonArray =new JSONArray(); String hql=""; try { if(id!=null&&!id.equals("")) { hql="From Menu Where pid='"+id+"'"; } else { hql="From Menu Where pid=NULL"; } List<Menu> list=service.find(hql); for(int i=0;i<list.size();i++) { Set<T_role> role =new HashSet<>(); role=list.get(i).getRole(); JSONObject json=new JSONObject(); for (Iterator<T_role> iterator = role.iterator(); iterator.hasNext();) { T_role r = iterator.next(); if(r.getId().equals(roleId)) { json.put("id", list.get(i).getId()); json.put("text",list.get(i).getName()); if(service.find("From Menu Where pid='"+list.get(i).getId()+"'").size()==0) { json.put("state","open"); } else if(service.find("From Menu Where pid='"+list.get(i).getId()+"'").size()>0) { json.put("state","closed"); } JSONObject j=new JSONObject(); j.put("url",list.get(i).getUrl()); json.put("attributes",j); jsonArray.add(json); } } } } catch (Exception e) { // TODO: handle exception logger.info(e.toString()); } writeJson(jsonArray); }
对于按钮保存到session的思路为再
getSession().setAttribute("quanxian", "none");在session中保存对应按钮的标识为显示或隐藏
按钮上style="disply:${sessionScope.quanxian}"
这样的话就将对应的按钮隐藏了。当然后面有更好的方法先写到这里,后面会有更好的方法。