(1)子角色的分類
子角色分為三類:欄位值、欄位、資料表。下面就三類子角色的實現進行說明。
(2)欄位值類(資料行)子角色的實現
如所示,是子角色2的欄位值類子角色許可權的記錄。RITEM是“資源項”欄位。欄位類的“資源項”的編碼規則為第1位是大寫英文字母“V”,表示資源類型,屬於第一部分。
隨後的一位或者多位大寫字母表示資料表簡碼,是屬於第二部分。比如的“VI12”和“VI17”的第2位是“I”, 該資料表簡碼I,從T_ZK_RESOURCE資源表查到是T_ZK_PROJECT 項目表。
最後的一位或者多位元字表示該資源順序號,是屬於第三部分。比如的“VI12”和“VI17”的數字12和數字17,表示T_ZK_PROJECT 項目表的項目ID為12和17的項目記錄,具體見。
子角色許可權_欄位值(資料行)_許可權圖:
實現指令碼如下:
(1)取欄位值類的子角色許可權 select ritem, --資源項 ritemlevel --權限類別(禁止/允許) from T_ZK_SUBROLE_C where ritemtype='欄位值' and subroleid=*** order by ritem 說明:對得到的ritem欄位進行分析擷取包含的資料表代碼和該資料表的記錄ID; (2)取欄位值類的子角色許可權對應的資料表名 select tablename, --資料表名 tablecname --資料表中文名 from T_ZK_RESOURCE where tableaname='***' 說明:根據第一步擷取的資料表代碼,從T_ZK_RESOURCE資源表得到對應的資料表名; (3)根據第二步擷取的資料表名和第一步擷取的記錄ID,形成該子角色的欄位值類許可權字串,如子角色為2,資料表名為T_ZK_PROJECT,記錄ID為12和17,則子角色2的欄位值類許可權字串為【12,17】,授予子角色2的使用者,在擷取可訪問項目的指令碼建議如下: select * from T_ZK_PROJECT where projectid in(12,17) and admindivision= 上述查詢語句指令碼中from子句的T_ZK_PROJECT即資料表名,where子句中的“12,17”為欄位值類許可權字串。 |
(3)欄位類子角色的實現
如所示,是子角色2的欄位類子角色許可權的記錄。RITEM是“資源項”欄位。欄位類的“資源項”的編碼規則為第1位是大寫英文字母“C”,表示資源類型,屬於第一部分。
隨後的一位或者多位大寫字母表示資料表簡碼,是屬於第二部分。比如的“CI16”和“CI26”的第2位是“I”, 該資料表簡碼I,從T_ZK_RESOURCE資源表查到是T_ZK_PROJECT 項目表。
最後的一位或者多位元字表示該資源順序號,是屬於第三部分。比如的“CI16”和“CI26”的數字16和數字26,表示T_ZK_PROJECT 項目表的第16個欄位和第26個欄位,從T_ZK_COLUMN欄位表查到分別是“合約編號”和“刪除標誌”欄位。
最後如所示,是“CI16”和“CI26”資源項所對應的具體欄位。
子角色許可權_欄位(資料列)_許可權圖:
實現指令碼如下:
select b.tablename, --資料表名 b.columnname, --欄位名 b.columnname, --欄位中文名 b.columnaname, --欄位簡名 a.ritemlevel --權限類別(禁止/允許) from T_ZK_SUBROLE_C a,T_ZK_COLUMN b where a.ritem=b.columnaname and a.ritemtype='欄位' and a.subroleid=*** |
用以上指令碼得到子角色的欄位類許可權以後,在查詢該表記錄的任何模組均要遵照子角色所設定的許可權來執行。比如,子角色2禁止訪問T_ZK_PROJECT 項目表的“合約編號”和“刪除標誌”欄位,那麼“項目背景資訊”頁面模組則不能顯示這兩個欄位的資料。但是“項目修改”頁面模組則暫時不受子角色2的許可權所限制。
建議:以“項目背景資訊”頁面模組來實現子角色的欄位類許可權控制原理。欄位類的子角色許可權具有排他性。對同一資料表來說,權限類別要麼只設定“允許”許可權,要麼都設定“禁止”許可權。那麼,對於設定“允許”許可權的資料表來說,沒有設定的其他欄位則禁止訪問;對於設定“禁止”許可權的資料表來說,沒有設定的其他欄位則允許訪問。比如的子角色2,設定對CI16、CI26為禁止許可權,那麼除這兩個欄位以外的其他欄位,均允許訪問。
(4)資料表類子角色的實現
如所示,是子角色2的資料表類子角色許可權的記錄。RITEM是“資源項”欄位。欄位類的“資源項”的編碼規則為第1位是大寫英文字母“T”,表示資源類型,屬於第一部分。
隨後的一位或者多位大寫字母表示資料表簡碼,是屬於第二部分。比如的“TQ”和“TR”的第2位分別是“Q”和“R”, 這兩個資料表簡碼,從T_ZK_RESOURCE資源表查到是T_ZK_DEVICELOG路燈裝置基本資料曆史表和T_ZK_COMPONENTLOG路燈裝置組件資訊曆史表。具體見。
子角色許可權_資料表_許可權圖:
實現指令碼如下:
(1)取資料表類的子角色許可權 select ritem, --資源項 ritemlevel --權限類別(禁止/允許) from T_ZK_SUBROLE_C where ritemtype='資料表' and subroleid=*** order by ritem 說明:對得到的ritem欄位進行分析擷取包含的資料表代碼; (2)取資料表類的子角色許可權對應的資料表名 select a.ritem, --資源項 a.ritemlevel, --權限類別(禁止/允許) b.tablename, --資料表名 b.tabelcname --資料表中文名 from T_ZK_SUBROLE_C a,T_ZK_RESOURCE b where substring(a.ritem,2,len(a.ritem)-1)=b.tableaname and a.ritemtype='資料表' and a.subroleid=*** order by a.ritem |