程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> JAVA的數據權限設計

JAVA的數據權限設計

編輯:關於JAVA

序言

在各種系統中,要保證數據對象的安全性以及易操作性,使企業的各業務部門、職能部門能夠方便而且高效的協同工作,那麼一個好的數據權限管理設計就成為一個關鍵的問題。雖然企業中各個單元的工作流程有所不同,處理的數據對象也有所不同,但是在組織結構、信息的處理方式上具有很多相同的地方,這就為設計數據對象的權限控制提供了一個抽象基礎。數據權限的控制不同於一般的功能權限的控制,一般的功能權限指的是某個用戶、角色或者是某個用戶組能不能操作某種功能。而數據權限指的是某個用戶、角色或者是某個用戶組對某個數據對象的操作幅度的問題,比如說用戶A可以對數據對象進行完全控制,而用戶B則只能對數據對象進行浏覽的權限,同時數據權限控制隸屬於動態權限控制的范疇。

數據權限設計

在當前的許多應用程序中都會涉及到權限管理,權限主要分為功能權限和數據權限,至於功能權限相對簡單些,網上也有不少的實現方案,這裡不再介紹,下邊主要探討下數據權限的設計方案。

數據權限跟功能權限有很大的不同,顆粒度很小,貫穿於整個項目的開發周期中,無法像功能權限一樣在項目要結尾的時候追加,也有一些公司有自己的權限組件(功能權限),給已完成的項目配上權限組件就生效了。數據權限做不到組件級別,必須在項目設計階段就已經規劃好。之前看網上同樣有人想基於SPRING切面的原理去實現數據權限,這樣就可以做到了低侵入、低耦合,想法很好,可是現實很骨感,這樣做使整個應用系統效率大減折扣,同樣對數據權限的控制策略也很不靈活。

下邊提出自己的設計方案,在系統中獨立一個數據權限模塊,該模塊可以根據當前業務模塊的SQL、當前操作人信息、當前權限的策略來自動生成對應的帶數據權限的SQL語句給業務模塊繼續處理,如下圖所示:

數據權限設計分析

SQL語句可擴展

數據權限往往作為功能權限的高級行為,可以從數據對象的幅度方面進行控制,比如用戶只能看自己的訂單、普通會員看不到某數據對象的高級屬性(字段)等等。顆粒度這麼細的情況下對結果集處理顯然是不可能了,這時只能介入到SQL語句中了,此時又不想在開發階段讓開發人員過多的考慮數據權限的問題,這時最好把SQL語句給提到一個配置文件中,或者數據庫中,開發階段只需開發人員通過數據權限模塊的接口調用得到已實現數據權限控制的SQL語句,這樣也算做到的代碼的低侵入。

SQL語句高效解析處理

數據權限模塊的核心之一就有SQL語句的高效解析處理,SQL處理指根據當前登錄人信息及數據權限策略生成一個帶有數據權限處理結果的SQL語句,所以這裡對SQL語句的解析處理必須要求精確、准確。在開發階段由開發人員把SQL寫入到配置文件中,在運行階段由數據權限取得該SQL進行分析處理(加上數據權限),這樣就完成了SQL的組裝處理。

數據權限策略設計

最核心的地方就是數據權限策略的設計了,這裡先引入幾個概念:

1、資源:數據權限的控制對象,業務系統中的各種資源。比如訂單單據、銷售單等

2、主體:用戶、部門、角色等

3、規則:用於【數據權限】的條件規則

這裡側重分析下主體及規則,主體有層級關系,可以為不同主體設置不同規則,比如:當前數據僅對創建人(或者某個人)有效、下級主體的權限對於上級主體同樣有效(可配置,如可勾選)、非當前主體只能看到部分數據(部分數據可選)。這裡只提供部分規則示例,現實環境中需要根據企業環境或者項目環境去完善這些規則。

數據權限策略優化

數據權限同樣屬於權限范疇,每次訪問都會去請求驗證權限,所以權限的認證必須要高效,這時可以寫算法或者是用MEMCACHE等來提高響應速度。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved