1. 程式人生 > >Java Web許可權管理設計及實現

Java Web許可權管理設計及實現

最近在做一個許可權相關的功能,在專案原有許可權管理上面進行擴充套件,一方面支援介面上控制到按鈕級別,後端介面沒有許可權不能進行訪問;另一個方面,對專案中應用管理模組的應用管理員授權,使其具有對其名下的應用新增使用者的許可權,而不必像原來一樣,所有的使用者都必須系統管理員進行新增。

整理了一下原有的許可權和新增的功能,對整體做一下總結。專案做的是一個灰度釋出平臺,使用spring+springMvc+mybatis,前端框架是bootstrap,許可權是使用的shiro,前端使用了一個adminLte的前端框架。

資料庫設計:

1、選單許可權:

  • 使用者表(user): 儲存使用者基本資訊
  • 角色表(role): 儲存系統角色資訊
  • 角色-使用者關聯表(role-user):儲存角色和使用者的對應關係(n:n)
  • 資源表(resource):儲存系統選單資源,包括上級選單,子選單,按鈕,按層級進行標識
  • 資源-角色關聯表(resource-role):儲存資源和角色的對應關係(n:n)
2、資料許可權:
  • 應用表(application):儲存系統中應用資訊
  • 角色-應用關聯表(role-application) :對應用關聯角色(n:n)
  • 使用者-應用關聯表(user-application):將使用者和應用進行關聯,為使用者分配對應的應用許可權,比如應用管理員,研發人員,使用者等。

具體實現:

簡單記錄一下實現邏輯吧,程式碼就不貼了。 選單許可權:
首先對實現資源管理的功能,對基本的資源基礎資料進行CRUD的操作。 然後是角色管理的功能,實現對角色進行CRUD操作的功能,然後實現對角色分配資源,使用了ztree進行展示,顯示使用者具有的最大資源許可權,關聯查詢稍複雜一點,不過也沒什麼難度。  隨後就是使用者管理了,要做的也是基本CRUD,然後對使用者關聯角色。 資料許可權: 資料許可權包括對角色關聯應用和對應用分配使用者並賦予不同的許可權兩部分。 首先實現對應用進行CRUD的功能,然後在角色管理中新增為角色分配應用的功能。 然後實現應用管理員新增應用使用者的功能。 實現過程中遇到幾個問題: 1、精確到按鈕的許可權如何控制? 這裡解決的時候做了兩部分工作,一方面是前端控制按鈕不顯示,在點選對應介面的時候,會將該頁面所具有的按鈕許可權給返回,前端通過js來判斷介面中所需要顯示的按鈕; 另一方面,將資源中每個按鈕對應的api存入資料庫,通過shiro自定義過濾器,判斷使用者是否具有改介面的訪問許可權。如果使用的不是shiro,可以自定義filter實現該功能。 2、應用的管理員從哪兒分配,如何解決應用中不同許可權使用者的資源分配問題,如何分配使用者?
首先在使用者新建應用的時候,將建立者設定為該應用的管理員,寫入到“使用者-應用”關聯表中,這樣改應用就有了預設的管理員,然後在角色管理中預設建立三個固定角色名稱的角色:appAdmin,appDeploy,appUser,對其分別分配不同的資源許可權,這樣寫的缺點就是不太靈活。有了應用管理員,只要對他授予新增使用者的許可權,也就解決了分配應用使用者的問題。

介面互動:

資源:
角色:
分配資源:
關聯應用:
使用者:
分配角色:
應用管理:
看到網上有說按鈕許可權可以通過自定義標籤的方式解決,還沒嘗試,可行的話,再進行補充。