ssh整合easyui的权限设计(登录不同账号关联不同的role获取不同的权限)

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

简单叙述下流程:

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

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

你可能感兴趣的:(easyui)