SpringBoot2構建基於RBAC權限模型的駕校代理小程序後端

本項目是使用SpringBoot2構建的一套基於RBAC權限模型的後臺管理系統,前端是微信小程序。前端

項目地址:

github.com/fuyunwang/D…git

項目的原因

最近接了個外包,主要是針對於駕校開發一個代理小程序。目的是爲了方便駕校的管理來招攬學員,同時方便維護學員和代理信息。github

項目介紹

項目業務功能介紹

本項目的業務需求比較少,是一個傳統項目,核心的業務點是權限管理,這裏我就採用比較規範的RBAC權限模型來開發。因爲項目比較小,這裏我就沒有采用Shiro或SpringSecurity等權限管理框架,而是本身使用過濾器開發了一套。我認爲這能夠算是權限管理的雛形,若是有更復雜的權限管理需求,能夠很方便的基於此擴展。apache

  1. 管理員角色爲最高權限,帳戶爲admin,初始密碼爲123456。
  2. 管理員能夠建立一級代理、添加學員。
  3. 一級代理能夠建立二級代理、添加學員。可是一級代理建立的代理和學員初始爲未審覈狀態,只有超管才能審覈
  4. 二級代理只有在審覈經過後才能添加學員且二級代理不能建立代理。
  5. 針對每一個代理獲取其下的全部學員,若是是超管或一級代理獲取其添加學員的同時獲取其下子代理的學員。
  6. 排行榜系統。根據每一個代理所添加的代理或學員數(包括子代理的學員數)來肯定代理的業績。得到日業績排行和總業績排行
  7. 針對排行榜中的代理進行點贊和評論。
  8. 批量導出指定代理下的學生數據
  9. 刪除指定代理,並將代理下的學生添加到父級代理上

技術實現

  1. 首先認證方面,我這裏仍然採用jwt token的認證方式。這裏我默認實現了記住密碼的功能。即用戶第一次登錄成功以後返回一個token在response header中,該token的有效期爲2小時,服務器端我保存一個有效期爲1周的refresh token。用戶在2個小時以內登陸不會返回token,2個小時和一週以內第一次攜帶過時token我會返回新的token在response header。一週以外refresh token失效,這裏須要用戶從新登陸。 這裏我也是借鑑了別人的思路:segmentfault.com/a/119000001…小程序

  2. 權限管理方面,我這裏共用了4張表,其實基準的RBAC權限模型最少要5張表。這裏比較簡單,因此我主要是用戶表、角色表、權限表以及權限角色表。用戶和角色是一對一的關聯關係、角色和權限是一對多的關係。表結構以下:segmentfault

  1. Filter實現權限過濾。這裏比較簡單,可是記錄一個比較雞肋的事。就是在SpringBoot中使用Filter時,SpringBoot提供了@ServletComponentScan(basePackages = "com.beautifulsoup.driving")@WebFilter@Order註解,可是這裏的@Order並不能實現多個Filter的順序性,無奈我只能採用FilterRegistrationBean來注入Filter,同時請求第一步進入的是Filter且其不被Spring管理,故而不能經過@Autowired註解只能構造方法注入。Filter內部用ThreadLocal保存用戶信息,校驗用戶的權限,ThreadLocal做爲線程級別對象,對於SpringSecurity中的用戶信息保存也是基於此的。
  2. 數據訪問層,這裏我使用的Spring Data。包括Spring Data Jpa和Spring Data Mongodb。傳統項目不必針對SQL作太多優化,這裏我就純ORM。
  3. 排行榜系統,仍然是記錄用戶添加代理和學員以後記錄入Redis。ZSET記錄用戶的日業績和總業績,而後將前10名從Hash中返回,提高效率。
  4. 點贊仍然使用Redis維護代理的點贊數、評論數據入Redis。
  5. 導出Excel,方便管理員維護代理和學員數據,這裏採用Apache POI

小程序界面展現:

接口文檔:

文檔地址:

github.com/fuyunwang/D…微信小程序

例子:

技術包括

  1. Spring Boot 2.1.3服務器

  2. Spring Data Jpa微信

  3. Spring Data Redis框架

  4. Spring Data Mongodb

  5. Spring Boot Mail

  6. Swagger

  7. Quartz

  8. JWT Token

  9. FastDFS

  10. apache poi

要點

  1. 熱點數據入Redis,提升SQL的查詢性能
  2. 認證採用Jwt Token+Refresh Token+黑名單策略,提升用戶體驗
  3. 權限管理採用規範的RBAC權限模型
  4. 點贊、排行等數據入Redis,天天進行一次Quartz任務調度,Redis中數據落庫
  5. 評論、發佈公告等信息入Mongodb,便於存儲、操做
相關文章
相關標籤/搜索