- 相關(guān)推薦
JAVA的數(shù)據(jù)權(quán)限設(shè)計
數(shù)據(jù)權(quán)限跟功能權(quán)限有很大的不同,顆粒度很小,貫穿于整個項目的開發(fā)周期中,無法像功能權(quán)限一樣在項目要結(jié)尾的時候追加,也有一些公司有自己的權(quán)限組件(功能權(quán)限),給已完成的項目配上權(quán)限組件就生效了。數(shù)據(jù)權(quán)限做不到組件級別,必須在項目設(shè)計階段就已經(jīng)規(guī)劃好。之前看網(wǎng)上同樣有人想基于SPRING切面的原理去實現(xiàn)數(shù)據(jù)權(quán)限,這樣就可以做到了低侵入、低耦合,想法很好,可是現(xiàn)實很骨感,這樣做使整個應(yīng)用系統(tǒng)效率大減折扣,同樣對數(shù)據(jù)權(quán)限的控制策略也很不靈活。下面是小編為大家?guī)淼年P(guān)于JAVA的數(shù)據(jù)權(quán)限設(shè)計的知識,歡迎閱讀。
序言
在各種系統(tǒng)中,要保證數(shù)據(jù)對象的安全性以及易操作性,使企業(yè)的各業(yè)務(wù)部門、職能部門能夠方便而且高效的協(xié)同工作,那么一個好的數(shù)據(jù)權(quán)限管理設(shè)計就成為一個關(guān)鍵的問題。雖然企業(yè)中各個單元的工作流程有所不同,處理的數(shù)據(jù)對象也有所不同,但是在組織結(jié)構(gòu)、信息的處理方式上具有很多相同的地方,這就為設(shè)計數(shù)據(jù)對象的權(quán)限控制提供了一個抽象基礎(chǔ)。數(shù)據(jù)權(quán)限的控制不同于一般的功能權(quán)限的控制,一般的功能權(quán)限指的是某個用戶、角色或者是某個用戶組能不能操作某種功能。而數(shù)據(jù)權(quán)限指的是某個用戶、角色或者是某個用戶組對某個數(shù)據(jù)對象的操作幅度的問題,比如說用戶A可以對數(shù)據(jù)對象進行完全控制,而用戶B則只能對數(shù)據(jù)對象進行瀏覽的權(quán)限,同時數(shù)據(jù)權(quán)限控制隸屬于動態(tài)權(quán)限控制的范疇。
數(shù)據(jù)權(quán)限設(shè)計
在當(dāng)前的許多應(yīng)用程序中都會涉及到權(quán)限管理,權(quán)限主要分為功能權(quán)限和數(shù)據(jù)權(quán)限,至于功能權(quán)限相對簡單些,網(wǎng)上也有不少的實現(xiàn)方案,這里不再介紹,下邊主要探討下數(shù)據(jù)權(quán)限的設(shè)計方案。
數(shù)據(jù)權(quán)限跟功能權(quán)限有很大的不同,顆粒度很小,貫穿于整個項目的開發(fā)周期中,無法像功能權(quán)限一樣在項目要結(jié)尾的時候追加,也有一些公司有自己的權(quán)限組件(功能權(quán)限),給已完成的項目配上權(quán)限組件就生效了。數(shù)據(jù)權(quán)限做不到組件級別,必須在項目設(shè)計階段就已經(jīng)規(guī)劃好。之前看網(wǎng)上同樣有人想基于SPRING切面的原理去實現(xiàn)數(shù)據(jù)權(quán)限,這樣就可以做到了低侵入、低耦合,想法很好,可是現(xiàn)實很骨感,這樣做使整個應(yīng)用系統(tǒng)效率大減折扣,同樣對數(shù)據(jù)權(quán)限的控制策略也很不靈活。
下邊提出自己的設(shè)計方案,在系統(tǒng)中獨立一個數(shù)據(jù)權(quán)限模塊,該模塊可以根據(jù)當(dāng)前業(yè)務(wù)模塊的SQL、當(dāng)前操作人信息、當(dāng)前權(quán)限的策略來自動生成對應(yīng)的帶數(shù)據(jù)權(quán)限的SQL語句給業(yè)務(wù)模塊繼續(xù)處理。
數(shù)據(jù)權(quán)限設(shè)計分析
SQL語句可擴展
數(shù)據(jù)權(quán)限往往作為功能權(quán)限的高級行為,可以從數(shù)據(jù)對象的幅度方面進行控制,比如用戶只能看自己的訂單、普通會員看不到某數(shù)據(jù)對象的高級屬性(字段)等等。顆粒度這么細的情況下對結(jié)果集處理顯然是不可能了,這時只能介入到SQL語句中了,此時又不想在開發(fā)階段讓開發(fā)人員過多的考慮數(shù)據(jù)權(quán)限的問題,這時最好把SQL語句給提到一個配置文件中,或者數(shù)據(jù)庫中,開發(fā)階段只需開發(fā)人員通過數(shù)據(jù)權(quán)限模塊的接口調(diào)用得到已實現(xiàn)數(shù)據(jù)權(quán)限控制的SQL語句,這樣也算做到的代碼的低侵入。
SQL語句高效解析處理
數(shù)據(jù)權(quán)限模塊的核心之一就有SQL語句的高效解析處理,SQL處理指根據(jù)當(dāng)前登錄人信息及數(shù)據(jù)權(quán)限策略生成一個帶有數(shù)據(jù)權(quán)限處理結(jié)果的SQL語句,所以這里對SQL語句的解析處理必須要求精確、準(zhǔn)確。在開發(fā)階段由開發(fā)人員把SQL寫入到配置文件中,在運行階段由數(shù)據(jù)權(quán)限取得該SQL進行分析處理(加上數(shù)據(jù)權(quán)限),這樣就完成了SQL的組裝處理。
數(shù)據(jù)權(quán)限策略設(shè)計
最核心的地方就是數(shù)據(jù)權(quán)限策略的設(shè)計了,這里先引入幾個概念:
1、資源:數(shù)據(jù)權(quán)限的控制對象,業(yè)務(wù)系統(tǒng)中的各種資源。比如訂單單據(jù)、銷售單等
2、主體:用戶、部門、角色等
3、規(guī)則:用于【數(shù)據(jù)權(quán)限】的條件規(guī)則
這里側(cè)重分析下主體及規(guī)則,主體有層級關(guān)系,可以為不同主體設(shè)置不同規(guī)則,比如:當(dāng)前數(shù)據(jù)僅對創(chuàng)建人(或者某個人)有效、下級主體的權(quán)限對于上級主體同樣有效(可配置,如可勾選)、非當(dāng)前主體只能看到部分?jǐn)?shù)據(jù)(部分?jǐn)?shù)據(jù)可選)。這里只提供部分規(guī)則示例,現(xiàn)實環(huán)境中需要根據(jù)企業(yè)環(huán)境或者項目環(huán)境去完善這些規(guī)則。
數(shù)據(jù)權(quán)限策略優(yōu)化
數(shù)據(jù)權(quán)限同樣屬于權(quán)限范疇,每次訪問都會去請求驗證權(quán)限,所以權(quán)限的認(rèn)證必須要高效,這時可以寫算法或者是用MEMCACHE等來提高響應(yīng)速度。
【JAVA的數(shù)據(jù)權(quán)限設(shè)計】相關(guān)文章:
理解Java訪問權(quán)限的控制07-22
Java數(shù)據(jù)類型09-19
java的數(shù)據(jù)類型說明08-28
Java數(shù)據(jù)類型轉(zhuǎn)換08-04
Java常用數(shù)據(jù)結(jié)構(gòu)及類06-17
Java的jar文件中讀取數(shù)據(jù)的方法09-27