淺談如何有效建立權(quán)限管理體系

字號:

本文擬結(jié)合POWERBUILDER語言,簡述如何在傳統(tǒng)C/S應(yīng)用系統(tǒng)當(dāng)中有效建立權(quán)限管理體系。
    何謂權(quán)限管理體系?就是如何控制操作使用者對軟件功能和系統(tǒng)數(shù)據(jù)的訪問權(quán)限的各個方面。傳統(tǒng)的C/S應(yīng)用系統(tǒng),多是“前臺應(yīng)用程序+后臺數(shù)據(jù)庫表”兩部分,這樣就決定了我們考慮權(quán)限管理體系就必然要考慮兩方面的內(nèi)容:
    1、用戶在前臺的功能權(quán)限:即該用戶能夠使用哪些菜單或窗口功能,例如:張三只能使用數(shù)據(jù)錄入功能,不能使用管理審批功能;
    2、用戶在后臺的功能權(quán)限:即該用戶能夠?qū)毂砭哂心男┳x、取訪問權(quán)限,例如:張三對于x_table表只有讀權(quán)限,沒有寫權(quán)限;
    是否上述兩方面權(quán)限管理就足夠了呢?答案是否定的,因為從應(yīng)用角度來考慮,還需要對用戶的數(shù)據(jù)訪問權(quán)限進(jìn)行控制,例如:張三屬于A分局,李四屬于B分局,張三、李四各錄入一條數(shù)據(jù),那么在查詢時顯然張三只能查詢到其自己錄入的數(shù)據(jù)記錄,而不允許其查詢到李四錄入的數(shù)據(jù)記錄,或者只能查詢而不允許修改,因此這就引出了第三方面的權(quán)限管理內(nèi)容:
    3、用戶在應(yīng)用的數(shù)據(jù)訪問權(quán)限:即該用戶能夠?qū)δ男?shù)據(jù)具有哪些訪問權(quán)限;
    下面我們逐一來了解如何實現(xiàn)上述三個方面的權(quán)限管理:
    1、前臺功能權(quán)限:
    談到前臺功能權(quán)限,我們要建立下面幾個概念:
    崗位:是指用戶具體負(fù)責(zé)的工作分類,如:數(shù)據(jù)錄入崗、文書審批崗、系統(tǒng)維護(hù)崗等;
    功能:是指用戶能夠使用的軟件功能,可以通過菜單或窗口來控制,但由于一個系統(tǒng)當(dāng)中窗口通常數(shù)據(jù)量龐大,控制用戶使用哪些窗口不太實際,因此我們通常菜單控制即可;
    工號:是指具體用戶登錄系統(tǒng)所用的用戶ID;
    上述三個概念的相互關(guān)系如下:
    一個崗位可以對應(yīng)多個功能菜單;
    一個功能菜單同樣可以對應(yīng)多個崗位;
    一個工號只能屬于一個崗位;
    進(jìn)而我們可以設(shè)計以下用戶登錄流程:
    (1)用戶ID登錄系統(tǒng)后讀取對應(yīng)用戶表查看其所在崗位;
    (2)查找該崗位對應(yīng)可以使用哪些菜單;
    (3)將用戶能夠使用的菜單和系統(tǒng)實際菜單逐一比較,屏蔽不允許其使用的菜單;
    這里面由于涉及到菜單的遍歷,需要使用到一些PB的使用技巧,詳見另外一篇文章《淺談如何利用PB實現(xiàn)動態(tài)添加菜單》,此處不再贅述。
    這樣通過上述三者關(guān)系,建立起一個用戶工號到底能夠使用哪些菜單,不能使用哪些菜單。為何要如此復(fù)雜,為何不直接定義每個工號能夠使用哪些菜單呢?那樣的話,顯然系統(tǒng)冗余太大,造成資源浪費(fèi),不符合規(guī)范化要求。
    2、后臺庫表權(quán)限:
    后臺庫表權(quán)限主要是根據(jù)前臺工號在后臺數(shù)據(jù)庫建立相應(yīng)的帳號(LOGIN)、用戶(USER),并根據(jù)一定的規(guī)則產(chǎn)生對應(yīng)密碼,并賦予其不同的角色(ROLE)、不同庫表的不同讀、寫權(quán)限,由于這部分與所采用的后臺具體數(shù)據(jù)庫密切相關(guān),因此本文不再詳述。
    3、應(yīng)用數(shù)據(jù)權(quán)限:
    應(yīng)用數(shù)據(jù)權(quán)限的實現(xiàn),主要通過各類數(shù)據(jù)表當(dāng)中必須引入數(shù)據(jù)記錄的錄入或產(chǎn)生單位代碼和操作員工號ID,當(dāng)用戶訪問相應(yīng)記錄時,首先比較當(dāng)前用戶ID及其所在單位,是否與數(shù)據(jù)記錄的產(chǎn)生操作員ID及其單位代碼一致,這個問題說起來簡單,但實際用PB語言實現(xiàn)起來需要講究一定技巧,要充分借助“繼承”這一特性,盡量高效、通用。