子角色權限的實現
(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
|
| 作者: XuGang 網名:鋼鋼 |
| 出處: http://xugang.cnblogs.com |
| 聲明: 本文版權歸作者和博客園共有。轉載時必須保留此段聲明,且在文章頁面明顯位置給出原文連接地址! |
浙公網安備 33010602011771號