天天看點

Day98 Java項目 (SSM+Dubbo)商城(七) 授權1.RBAC模型2.管理者角色設定3.角色權限設定4.使用者權限設定5.使用者菜單篩選

1.RBAC模型

一.什麼是RBAC

  1. 權限系統提的最多的就是 RBAC(Role-Based Access Control 基于角色的通路控制)。 所謂角色,其實就是權限的集合,某個角色就是某幾個權限的結合。其目的是為了簡化授權和鑒權的過程。

二.表結構分析

  1. 企業開發中 RBAC模型設計為7張表,其中4張為基礎表,3張為中間表。
    Day98 Java項目 (SSM+Dubbo)商城(七) 授權1.RBAC模型2.管理者角色設定3.角色權限設定4.使用者權限設定5.使用者菜單篩選
  2. 使用者與角色

    使用者和角色為多對多關系,通過使用者角色中間表關聯

    tb_admin 管理者表:

    Day98 Java項目 (SSM+Dubbo)商城(七) 授權1.RBAC模型2.管理者角色設定3.角色權限設定4.使用者權限設定5.使用者菜單篩選
    tb_role 角色表:
    Day98 Java項目 (SSM+Dubbo)商城(七) 授權1.RBAC模型2.管理者角色設定3.角色權限設定4.使用者權限設定5.使用者菜單篩選
    tb_admin_role 管理者角色中間表:
    Day98 Java項目 (SSM+Dubbo)商城(七) 授權1.RBAC模型2.管理者角色設定3.角色權限設定4.使用者權限設定5.使用者菜單篩選
  3. 角色與權限

    角色和權限為多對多關系,通過角色權限中間表關聯

    tb_role 角色表:

    Day98 Java項目 (SSM+Dubbo)商城(七) 授權1.RBAC模型2.管理者角色設定3.角色權限設定4.使用者權限設定5.使用者菜單篩選
    tb_resource 權限表(資源表):
    Day98 Java項目 (SSM+Dubbo)商城(七) 授權1.RBAC模型2.管理者角色設定3.角色權限設定4.使用者權限設定5.使用者菜單篩選
    tb_role_resource 角色資源中間表:
    Day98 Java項目 (SSM+Dubbo)商城(七) 授權1.RBAC模型2.管理者角色設定3.角色權限設定4.使用者權限設定5.使用者菜單篩選
  4. 權限與菜單

    權限和菜單為多對多關系,通過權限菜單中間表關聯

    tb_resource 權限表(資源表):

    Day98 Java項目 (SSM+Dubbo)商城(七) 授權1.RBAC模型2.管理者角色設定3.角色權限設定4.使用者權限設定5.使用者菜單篩選
    tb_menu 菜單表:
    Day98 Java項目 (SSM+Dubbo)商城(七) 授權1.RBAC模型2.管理者角色設定3.角色權限設定4.使用者權限設定5.使用者菜單篩選
    tb_resource_menu 資源菜單中間表:
    Day98 Java項目 (SSM+Dubbo)商城(七) 授權1.RBAC模型2.管理者角色設定3.角色權限設定4.使用者權限設定5.使用者菜單篩選

2.管理者角色設定

一.需求分析

  1. 管理者和角色為多對多關系,在儲存管理者時實作對管理者角色中間表的添加。
    Day98 Java項目 (SSM+Dubbo)商城(七) 授權1.RBAC模型2.管理者角色設定3.角色權限設定4.使用者權限設定5.使用者菜單篩選

二.思路分析

  1. 送出角色設定
    1. 建立管理者角色中間表的實體類和資料通路接口
    2. 建立組合實體類,包含管理者實體類和角色ID集合兩個屬性
    3. 修改管理者實體類,為id添加以下注解可以辨別該主鍵為自增
      Day98 Java項目 (SSM+Dubbo)商城(七) 授權1.RBAC模型2.管理者角色設定3.角色權限設定4.使用者權限設定5.使用者菜單篩選
    4. 修改管理者add方法,取出管理者實體儲存,取出角色ID集合,循環添加到管理者角色中間表。
    5. 注意在儲存管理者密碼時需要對密碼進行bcrypt加密。
    6. “所屬角色”使用elementui的select選擇器 ,為 el‐select 設定 multiple 屬性即可啟用多選
  2. 讀取角色設定
    1. 修改findById方法的傳回值為組合實體類,修改其中的邏輯,組合實體類的角色id集合需要查詢管理者角色中間表。
    2. 修改update方法,删除原來的相關的中間表資料,再循環添加中間表資料。
    3. 讀取後需要把密碼屬性設定為null, 如果使用者沒有在界面輸入密碼則保持密碼不變,如果填寫了密碼需要進行bcrypt加密。

3.角色權限設定

一.需求分析

  1. 顯示所有的權限清單,并自動勾選已經儲存的權限。使用者勾選權限後,點選送出,将勾選的權限id送出給後端儲存
    Day98 Java項目 (SSM+Dubbo)商城(七) 授權1.RBAC模型2.管理者角色設定3.角色權限設定4.使用者權限設定5.使用者菜單篩選

二.思路分析

  1. 送出權限設定
    1. 建立角色權限中間表的實體類和資料通路接口
    2. 前後端約定要送出的資料格式,包括“角色id”和“權限id清單”。根據約定的資料格式建立組合實體類。
    3. 後端添加方法,接收組合實體類參數,提取“角色id”和“權限id清單”,循環讀取權限id插入到角色權限中間表中。
  2. 讀取權限設定
    1. 後端查詢權限表(資源表),以樹狀結構傳回資料。前端使用兩層v-for循環輸出清單。
    2. 後端添加方法,根據角色查詢權限id清單,前端擷取權限id清單後實作複選框的勾選。

4.使用者權限設定

一.需求分析

  1. 當使用者執行一個不存在的權限的url,需要攔截請求。

二.spring security授權控制

  1. 基于URL通路控制

    在UserDetailsServiceImpl的loadUserByUsername方法,實作對目前使用者的授權

    Day98 Java項目 (SSM+Dubbo)商城(七) 授權1.RBAC模型2.管理者角色設定3.角色權限設定4.使用者權限設定5.使用者菜單篩選
    修改applicationContext_security.xml
    Day98 Java項目 (SSM+Dubbo)商城(七) 授權1.RBAC模型2.管理者角色設定3.角色權限設定4.使用者權限設定5.使用者菜單篩選

    hasAnyAuthority():擁有任意權限都可以通路

    hasAuthority('brand'): 擁有brand的權限可以通路

    hasAnyAuthority('goods_add','goods_edit')" :擁有goods_add和goods_edit其中一個權限就可以通路

  2. 基于方法的通路控制

    對目前使用者授權,同上 ,對方法的通路控制如下:

    1. 修改applicationContext_security.xml ,增加配置 ,啟用注解
      Day98 Java項目 (SSM+Dubbo)商城(七) 授權1.RBAC模型2.管理者角色設定3.角色權限設定4.使用者權限設定5.使用者菜單篩選
    2. 在進行權限控制的方法上添加注解
      Day98 Java項目 (SSM+Dubbo)商城(七) 授權1.RBAC模型2.管理者角色設定3.角色權限設定4.使用者權限設定5.使用者菜單篩選

三.思路分析

  1. 編寫SQL語句,通過登入名查詢資源KEY清單
    Day98 Java項目 (SSM+Dubbo)商城(七) 授權1.RBAC模型2.管理者角色設定3.角色權限設定4.使用者權限設定5.使用者菜單篩選
  2. 資料通路接口新增方法,根據登入名查詢資源KEY清單
  3. 服務層實作根據登入名查詢資源KEY清單
  4. UserDetailsServiceImpl的loadUserByUsername方法,調用根據登入名查詢資源KEY清單的方法,将資源key清單添加到當

    前使用者。

    Day98 Java項目 (SSM+Dubbo)商城(七) 授權1.RBAC模型2.管理者角色設定3.角色權限設定4.使用者權限設定5.使用者菜單篩選
  5. )修改applicationContext_security.xml,添加對url的攔截,或在方法上添加注解實作對方法的攔截。

5.使用者菜單篩選

一.需求分析

  1. 使用者登入後進入主界面,顯示的菜單為使用者所擁有的權限關聯的菜單。不具有權限的菜單不顯示。

二.思路分析

  1. 編寫SQL語句,根據目前登入名擷取菜單清單的方法
    Day98 Java項目 (SSM+Dubbo)商城(七) 授權1.RBAC模型2.管理者角色設定3.角色權限設定4.使用者權限設定5.使用者菜單篩選
    注意通過上述語句,擷取的菜單清單隻包含三級菜單,而我們需要傳回包括一級菜單、二級菜單和三級菜單的菜單清單。隻要三級菜單存在,就要有它的二級菜單;隻要有一個二級菜單就要有它的一級菜單。
  2. 查詢二級菜單清單:
    Day98 Java項目 (SSM+Dubbo)商城(七) 授權1.RBAC模型2.管理者角色設定3.角色權限設定4.使用者權限設定5.使用者菜單篩選
  3. 查詢一級菜單清單:
    Day98 Java項目 (SSM+Dubbo)商城(七) 授權1.RBAC模型2.管理者角色設定3.角色權限設定4.使用者權限設定5.使用者菜單篩選
  4. 最後我們通過UNION運算符将三個語句連接配接成一條語句
  5. 将上述SQL封裝為查詢方法
  6. 在controller擷取目前使用者名,調用上述查詢方法。

繼續閱讀