SSM整合之企业级后台管理系统(15) - 用户权限设计

时光毁灭记忆、已成空白 提交于 2020-01-22 16:41:16

一、需求

不同权限的用户登录后台管理系统时,需要展示不同的菜单,不同的用户有不同的权限嘛。那这个需求该如何实现呢?

二、设计思路

我们这样来思考。

对于用户权限控制的设计主要涉及3个实体:用户、岗位和权限。

一个用户对应一个岗位,一个岗位对应一些菜单模块(权限)。

既然是这样,那就不难设计了。

我们在数据库中设计3个表:

  • 用户表(user)
  • 岗位表(role)
  • 模块表(module)

然后,继续增加两个表:

  • 用户岗位表(user_role):用于保存用户所处的岗位信息
  • 岗位模块表(role_module):用户保存岗位对应的菜单模块信息

作为灵魂画家,给大家画个图描述一下吧:

      用户表 ------------------- 岗位表 ------------------- 模块表

           |                                |     |                                |

           | ---- 用户岗位表 ---- |     | ---- 岗位模块表 ---- |

做完表设计,权限设计的方案就基本出来了。

三、关键代码

登录成功后进入主页时,加载用户的顶部菜单和左侧菜单

@RequestMapping("/index")
public ModelAndView index(HttpServletRequest request) {
    String username = request.getSession().getAttribute("username").toString();
    //根据用户名获取用户菜单
    List<UserRoleModule> menuList = userRoleModuleService.getMenuByUsername(username);
    List<UserRoleModule> topMenuList = new ArrayList<UserRoleModule>();
    List<UserRoleModule> sideMenuList = new ArrayList<UserRoleModule>();
    //分别保存顶部菜单和左侧菜单
    for (UserRoleModule menu : menuList) {
        if ("0".equals(menu.getM_parent().toString())) {
            topMenuList.add(menu);
        } else {
            sideMenuList.add(menu);
        }
    }
    ModelAndView model = new ModelAndView("index");
    //获取用户姓名,用于展示在前端页面上
    if (menuList.size() > 0) {
        model.addObject("user_cname", menuList.get(0).getCname());
    } else {//用户没有菜单时,展示用户名
        model.addObject("user_cname", username);
    }
    model.addObject("topMenuList", JSON.toJSONString(topMenuList));
    model.addObject("sideMenuList", JSON.toJSONString(sideMenuList));
    logger.info("/index - username: " + username);
    model.addObject("current_user", username);
    return model;
}

前端页面上具体如何展示顶部菜单和左侧菜单,在前面的博文中已经介绍了哦,这里就不赘述了。

Mybatis中的查询语句:

<select id="getMenuByUsername" parameterType="java.lang.String" resultMap="BaseResultMap">
    select
    user_id, username, cname, role_id, role_name, m_id, m_name, m_parent, url, m_class
    from user_role_module
    where username = #{username,jdbcType=VARCHAR}
</select>

四、本篇小结

这篇博客给大家提供了一种控制用户权限的方案,让不同用户登录进系统后展示不同的菜单。不过这个方案并不完美,还有一些比较严重的问题需要解决,在后续教程中会给大家提到。更多交流欢迎大家留言或加群(584017112):

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!