本發(fā)明涉及計算機(jī)軟件技術(shù)領(lǐng)域,尤其涉及一種數(shù)據(jù)權(quán)限管理系統(tǒng)及方法。
背景技術(shù):
軟件開發(fā)中的權(quán)限包含操作權(quán)限和數(shù)據(jù)權(quán)限兩類。操作權(quán)限限制了用戶能干什么,比如能使用哪些菜單、能點(diǎn)擊哪些按鈕,這是權(quán)限管理的第一把鑰匙。數(shù)據(jù)權(quán)限限制用戶能讀取哪些數(shù)據(jù),這是權(quán)限管理的第二把鑰匙,數(shù)據(jù)權(quán)限是更進(jìn)一步的權(quán)限管理。數(shù)據(jù)權(quán)限管理與功能權(quán)限管理是軟件開發(fā)中需要解決的兩個基礎(chǔ)問題。對于數(shù)據(jù)權(quán)限管理,一般的方法是依靠應(yīng)用程序硬編碼的形式來解決,因此無法實(shí)現(xiàn)通用、動態(tài)配置、熱插拔的數(shù)據(jù)權(quán)限管理方式。
因此,亟需提出一種通用、動態(tài)配置、熱插拔的數(shù)據(jù)權(quán)限管理系統(tǒng)及方法解決上述問題。
技術(shù)實(shí)現(xiàn)要素:
有鑒于此,本發(fā)明提供了一種通用、動態(tài)配置、熱插拔且簡單有效的數(shù)據(jù)權(quán)限管理方法,適用于有數(shù)據(jù)權(quán)限管理需求的業(yè)務(wù)系統(tǒng)。
本發(fā)明一方面提供一種數(shù)據(jù)權(quán)限管理系統(tǒng),包括:數(shù)據(jù)元管理器、配置器及解釋器;其中,數(shù)據(jù)元管理器用于標(biāo)記業(yè)務(wù)系統(tǒng)中需要進(jìn)行權(quán)限管理的數(shù)據(jù);配置器用于針對數(shù)據(jù)元管理器標(biāo)記的數(shù)據(jù)配置數(shù)據(jù)訪問規(guī)則;解釋器用于攔截用戶訪問所述業(yè)務(wù)系統(tǒng)時產(chǎn)生的數(shù)據(jù),判斷該數(shù)據(jù)是否被所述數(shù)據(jù)訪問規(guī)則所約束;若是,根據(jù)所述數(shù)據(jù)訪問規(guī)則返回數(shù)據(jù)。
優(yōu)選地,所述系統(tǒng)用于數(shù)據(jù)庫的數(shù)據(jù)權(quán)限管理;以及所述需要進(jìn)行權(quán)限管理的數(shù)據(jù)具體為:數(shù)據(jù)庫中需要進(jìn)行權(quán)限管理的表、所述表中需要進(jìn)行權(quán)限管理的字段、所述字段的數(shù)據(jù)類型。
優(yōu)選地,所述配置器包括:規(guī)則創(chuàng)建模塊,用于基于數(shù)據(jù)元管理器標(biāo)記的表、表中的字段、字段的數(shù)據(jù)類型創(chuàng)建數(shù)據(jù)訪問規(guī)則;任一條數(shù)據(jù)訪問規(guī)則對應(yīng)于數(shù)據(jù)庫中的一個表;規(guī)則庫,用于存儲規(guī)則創(chuàng)建模塊創(chuàng)建的數(shù)據(jù)訪問規(guī)則;規(guī)則管理模塊,用于啟動、或關(guān)閉、或修改、或刪除規(guī)則庫中的數(shù)據(jù)訪問規(guī)則。
優(yōu)選地,規(guī)則庫中存儲的數(shù)據(jù)訪問規(guī)則為JSON格式。
優(yōu)選地,所述攔截用戶訪問所述業(yè)務(wù)系統(tǒng)時產(chǎn)生的數(shù)據(jù),判斷該數(shù)據(jù)是否被所述數(shù)據(jù)訪問規(guī)則所約束具體為:解釋器攔截用戶訪問數(shù)據(jù)庫時產(chǎn)生的查詢語句,提取所述查詢語句中的表名,判斷所述表名是否在規(guī)則庫中。
優(yōu)選地,所述根據(jù)所述數(shù)據(jù)訪問規(guī)則返回數(shù)據(jù)具體為:將所述表名對應(yīng)的數(shù)據(jù)訪問規(guī)則組合到所述查詢語句中進(jìn)行查詢,將查詢結(jié)果向用戶返回。
本發(fā)明另一方面提供一種數(shù)據(jù)權(quán)限管理方法,包括步驟:
S1.標(biāo)記業(yè)務(wù)系統(tǒng)中需要進(jìn)行權(quán)限管理的數(shù)據(jù);
S2.針對標(biāo)記的數(shù)據(jù)配置數(shù)據(jù)訪問規(guī)則;
S3.攔截用戶訪問所述業(yè)務(wù)系統(tǒng)時產(chǎn)生的數(shù)據(jù),判斷該數(shù)據(jù)是否被所述數(shù)據(jù)訪問規(guī)則所約束;若是,根據(jù)所述數(shù)據(jù)訪問規(guī)則返回數(shù)據(jù)。
優(yōu)選地,所述方法用于數(shù)據(jù)庫的數(shù)據(jù)權(quán)限管理;以及所述需要進(jìn)行權(quán)限管理的數(shù)據(jù)具體為:數(shù)據(jù)庫中需要進(jìn)行權(quán)限管理的表、所述表中需要進(jìn)行權(quán)限管理的字段、所述字段的數(shù)據(jù)類型。
優(yōu)選地,所述數(shù)據(jù)訪問規(guī)則存儲于規(guī)則庫中;以及步驟S3具體為:攔截用戶訪問數(shù)據(jù)庫時產(chǎn)生的查詢語句,提取所述查詢語句中的表名,判斷所述表名是否在規(guī)則庫中;若是,將所述表名對應(yīng)的數(shù)據(jù)訪問規(guī)則組合到所述查詢語句中進(jìn)行查詢,將查詢結(jié)果向用戶返回。
優(yōu)選地,步驟S3還包括:若所述表名不在規(guī)則庫中,以所述查詢語句進(jìn)行查詢,向用戶返回查詢結(jié)果。
由以上技術(shù)方案可知,本發(fā)明通過對需要保護(hù)的數(shù)據(jù)配置數(shù)據(jù)訪問規(guī)則,并利用數(shù)據(jù)訪問規(guī)則管理用戶的訪問,從而實(shí)現(xiàn)有效的數(shù)據(jù)權(quán)限管理。本發(fā)明具有通用、可動態(tài)配置、可熱插拔的優(yōu)點(diǎn)。
附圖說明
圖1是本發(fā)明的數(shù)據(jù)權(quán)限管理系統(tǒng)組成示意圖。
圖2是本發(fā)明的數(shù)據(jù)權(quán)限管理方法示意圖。
具體實(shí)施方式
為使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下參照附圖并舉出優(yōu)選實(shí)施例,對本發(fā)明進(jìn)一步詳細(xì)說明。然而,需要說明的是,說明書中列出的許多細(xì)節(jié)僅僅是為了使讀者對本發(fā)明的一個或多個方面有一個透徹的理解,即便沒有這些特定的細(xì)節(jié)也可以實(shí)現(xiàn)本發(fā)明的這些方面。
本發(fā)明的發(fā)明人考慮到,現(xiàn)有的數(shù)據(jù)權(quán)限管理方法多依賴于應(yīng)用程序硬編碼的方式,無法實(shí)現(xiàn)通用、動態(tài)配置、熱插拔的數(shù)據(jù)權(quán)限管理。于是首先為需保護(hù)的數(shù)據(jù)配置數(shù)據(jù)訪問規(guī)則,之后將對應(yīng)的數(shù)據(jù)訪問規(guī)則組合到用戶查詢語句中進(jìn)行查詢,實(shí)現(xiàn)了簡單有效、通用可靠的數(shù)據(jù)權(quán)限管理。以下詳細(xì)介紹本發(fā)明的技術(shù)方案。
圖1示出了本發(fā)明的數(shù)據(jù)權(quán)限管理系統(tǒng)組成,如圖1所示,數(shù)據(jù)權(quán)限管理系統(tǒng)包括:數(shù)據(jù)元管理器1、配置器2及解釋器3。
具體而言,數(shù)據(jù)元管理器1用于標(biāo)記業(yè)務(wù)系統(tǒng)中需要進(jìn)行權(quán)限管理的數(shù)據(jù),為數(shù)據(jù)權(quán)限管理系統(tǒng)提供元數(shù)據(jù)支持。一般來說,本發(fā)明的數(shù)據(jù)權(quán)限管理系統(tǒng)具有良好的通用性,可用于各類業(yè)務(wù)系統(tǒng)的數(shù)據(jù)權(quán)限管理,下面以數(shù)據(jù)庫為例進(jìn)行說明。較佳地,上述需要進(jìn)行權(quán)限管理的數(shù)據(jù)具體為:數(shù)據(jù)庫中需要進(jìn)行權(quán)限管理的表、上述表中需要進(jìn)行權(quán)限管理的字段、上述字段的數(shù)據(jù)類型。表與字段是用戶最終訪問的數(shù)據(jù)資源,是數(shù)據(jù)訪問規(guī)則設(shè)置的基礎(chǔ)數(shù)據(jù)來源。將數(shù)據(jù)類型納入維護(hù)是為了在配置數(shù)據(jù)訪問規(guī)則時進(jìn)行有效性驗(yàn)證。
配置器2用于針對數(shù)據(jù)元管理器1標(biāo)記的數(shù)據(jù)配置數(shù)據(jù)訪問規(guī)則,當(dāng)用戶訪問時提供給解釋器進(jìn)行解析。數(shù)據(jù)訪問規(guī)則規(guī)定什么樣的用戶可以訪問什么樣的數(shù)據(jù)。實(shí)際應(yīng)用中,數(shù)據(jù)訪問規(guī)則設(shè)置為JSON(JavaScr i pt對象表示法)格式。一般地,數(shù)據(jù)訪問規(guī)則符合以下原則:
a)一條數(shù)據(jù)訪問規(guī)則對應(yīng)數(shù)據(jù)庫中的一個表。
b)可以針對一個表建立多條數(shù)據(jù)訪問規(guī)則。
c)每一條規(guī)則可以手動啟動或者關(guān)閉。
d)可以按需創(chuàng)建、修改或者刪除規(guī)則而不用重啟應(yīng)用軟件。
e)數(shù)據(jù)訪問規(guī)則總是:{字段條件允許值}。其中,字段是在數(shù)據(jù)元管理中維護(hù)的對應(yīng)的表的屬性。條件與標(biāo)準(zhǔn)sql中的條件相同,取值可以是and、or、like、between、>=、<=等。允許值是針對不同的條件所需要設(shè)置的一個參數(shù)。
f)數(shù)據(jù)權(quán)限規(guī)則可以合并。
舉例來說,一條JSON格式的數(shù)據(jù)訪問規(guī)則如下:
{
"rules":
[
{"field":"OrderDate","op":"less","value":"2012-01-01"},
{"field":"roleName","op":"equal","value":"saleManager"}
],
"op":"and"
}
翻譯結(jié)果為:查找用戶角色為“saleManager”的所有訂單時間小于2012-01-01的單據(jù)。
在本發(fā)明優(yōu)選實(shí)施例中,配置器2包括:規(guī)則創(chuàng)建模塊21、規(guī)則庫22、規(guī)則管理模塊23。具體地,規(guī)則創(chuàng)建模塊21用于基于數(shù)據(jù)元管理器1標(biāo)記的表、表中的字段、字段的數(shù)據(jù)類型創(chuàng)建數(shù)據(jù)訪問規(guī)則。規(guī)則庫22用于存儲規(guī)則創(chuàng)建模塊創(chuàng)建的數(shù)據(jù)訪問規(guī)則。規(guī)則管理模塊23用于啟動、或關(guān)閉、或修改、或刪除規(guī)則庫中的數(shù)據(jù)訪問規(guī)則。特別地,規(guī)則管理模塊23可啟動、或關(guān)閉、或修改、或刪除規(guī)則庫中的數(shù)據(jù)訪問規(guī)則而不需重啟應(yīng)用軟件,由此實(shí)現(xiàn)了數(shù)據(jù)權(quán)限管理系統(tǒng)的動態(tài)配置。
實(shí)際應(yīng)用中,規(guī)則庫22的格式為:表名、數(shù)據(jù)訪問規(guī)則、是否可用。實(shí)例如下:
表1
表1示出了序號為1、表名為t-order的表的數(shù)據(jù)訪問規(guī)則,此規(guī)則可用。數(shù)據(jù)訪問規(guī)則具體為:規(guī)則1或規(guī)則2。規(guī)則1為:查找當(dāng)前用戶ID在2、6之間的整型數(shù)據(jù)。規(guī)則2為:查找當(dāng)前用戶ID為7、數(shù)據(jù)類型為整型,并且,職工ID為“currentEmployeeid”、數(shù)據(jù)類型為數(shù)字的數(shù)據(jù)。
解釋器3用于攔截用戶訪問業(yè)務(wù)系統(tǒng)時產(chǎn)生的數(shù)據(jù),判斷該數(shù)據(jù)是否被數(shù)據(jù)訪問規(guī)則所約束。如果是,則根據(jù)數(shù)據(jù)訪問規(guī)則返回數(shù)據(jù)。
在本發(fā)明優(yōu)選實(shí)施例中,解釋器3攔截用戶訪問數(shù)據(jù)庫時產(chǎn)生的SQL查詢語句,提取查詢語句中的表名,判斷上述表名是否在規(guī)則庫22中。如果是,將表名對應(yīng)的數(shù)據(jù)訪問規(guī)則作為WHERE條件,組合到SQL查詢語句中進(jìn)行查詢,將查詢結(jié)果向用戶返回。
可以理解的是,若上述表名不在規(guī)則庫22中,則不改變原查詢語句,向用戶返回原查詢結(jié)果。
這樣,通過判斷用戶訪問的數(shù)據(jù)表是否在規(guī)則庫中,將相應(yīng)的數(shù)據(jù)訪問規(guī)則提取并添加在原始查詢語句中,本發(fā)明可按照預(yù)定規(guī)則對數(shù)據(jù)權(quán)限進(jìn)行管理。具體應(yīng)用中,在業(yè)務(wù)系統(tǒng)中嵌入本發(fā)明的應(yīng)用軟件即可對數(shù)據(jù)權(quán)限進(jìn)行管理。不需要時,將其與業(yè)務(wù)系統(tǒng)分離即可。在上述過程中,數(shù)據(jù)權(quán)限管理系統(tǒng)的介入不影響業(yè)務(wù)系統(tǒng)的正常運(yùn)行。
通過以上設(shè)置,本發(fā)明實(shí)現(xiàn)了通用、動態(tài)配置、熱插拔的數(shù)據(jù)權(quán)限管理,適用于各類有數(shù)據(jù)權(quán)限管理需求的業(yè)務(wù)系統(tǒng)。
圖2示出了本發(fā)明的數(shù)據(jù)權(quán)限管理方法,參見圖2,上述方法具體如下執(zhí)行:
步驟S1,標(biāo)記業(yè)務(wù)系統(tǒng)中需要進(jìn)行權(quán)限管理的數(shù)據(jù)。
在本發(fā)明優(yōu)選實(shí)施例中,上述方法用于數(shù)據(jù)庫的數(shù)據(jù)權(quán)限管理,上述需要進(jìn)行權(quán)限管理的數(shù)據(jù)具體為:數(shù)據(jù)庫中需要進(jìn)行權(quán)限管理的表、表中需要進(jìn)行權(quán)限管理的字段、字段的數(shù)據(jù)類型。
步驟S2,針對標(biāo)記的數(shù)據(jù)配置數(shù)據(jù)訪問規(guī)則,將數(shù)據(jù)訪問規(guī)則存儲于規(guī)則庫中。
步驟S3,攔截用戶訪問所述業(yè)務(wù)系統(tǒng)時產(chǎn)生的數(shù)據(jù),判斷該數(shù)據(jù)是否被所述數(shù)據(jù)訪問規(guī)則所約束。若是,根據(jù)所述數(shù)據(jù)訪問規(guī)則返回數(shù)據(jù)。
較佳地,上述步驟具體為:攔截用戶訪問數(shù)據(jù)庫時產(chǎn)生的查詢語句,提取所述查詢語句中的表名,判斷所述表名是否在規(guī)則庫中;若是,將所述表名對應(yīng)的數(shù)據(jù)訪問規(guī)則組合到所述查詢語句中進(jìn)行查詢,將查詢結(jié)果向用戶返回。若所述表名不在規(guī)則庫中,以所述查詢語句進(jìn)行查詢,向用戶返回查詢結(jié)果。
本發(fā)明提供的數(shù)據(jù)權(quán)限管理系統(tǒng)及方法,可通用地、動態(tài)配置地、熱插拔地對數(shù)據(jù)權(quán)限進(jìn)行管理,能夠解決軟件研發(fā)過程中的數(shù)據(jù)權(quán)限管理問題。
本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例方法中的全部或部分步驟是可以通過程序來指令相關(guān)的硬件來完成,該程序可以存儲于一計算機(jī)可讀取存儲介質(zhì)中,如:ROM/RAM、磁碟、光盤等。
以上所述僅是本發(fā)明的優(yōu)選實(shí)施方式,應(yīng)當(dāng)指出,對于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以作出若干改進(jìn)和潤飾,這些改進(jìn)和潤飾也應(yīng)視為本發(fā)明的保護(hù)范圍。