SSM整合之企業級後臺管理系統(15) - 用戶權限設計

一、需求

不同權限的用戶登錄後臺管理系統時,需要展示不同的菜單,不同的用戶有不同的權限嘛。那這個需求該如何實現呢?

二、設計思路

我們這樣來思考。

對於用戶權限控制的設計主要涉及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):

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章