基于权限基础表建立,权限基础数据操作。

简单叙述下流程:

登录账号:获取当前账号绑定的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}"

这样的话就将对应的按钮隐藏了。当然后面有更好的方法先写到这里,后面会有更好的方法。

posted on 2015-04-28 15:13  包子吃三斤  阅读(318)  评论(0编辑  收藏  举报