繼續,這是第五章了。我發現了,寫文章比寫程式還要有難度。另外,大家期待的高人——吉日嘎拉,已經露頭了,他在第四章裡面留言了,而且留了很多,回複的比較晚,可能有些Tx沒有看到,如果您感興趣可以去看看,如果不感興趣就算了。
通用權限想要寫的文章目錄:(這是第五章)
1、 簡介、資料庫的總體結構
2、 介紹人員表組
3、 介紹組織結構表組
4、 介紹角色表組
5、 介紹“項目自我描述表組”
6、 權限到節點
7、 權限到按鈕
8、 權限到清單(表單、查詢)
9、 權限的驗證
10、 資源方面的權限
11、 角色管理的程式(給客戶用的)
12、 權限下放
13、 個性化設定
項目描述表組
這裡的表比較多,主要分為兩個部分,一個是“字典資訊”,這裡就不介紹了,感興趣的話,請下載下傳資料庫說明文檔;另一個就是裝載配置資訊的表。
項目描述,顧名思義就是想要用資料(記錄)的形式來描述一個項目,當然不能所有的事情都能用資料的形式描述出來,隻有和資料相關的地方才行。最初的目的是給我的幾個自定義控件指派用的,比如表格控件、表單控件、查詢控件等,他們都需要很多的資訊給他們的屬性指派,如果直接在代碼裡面寫的話,那還不如直接拖拽控件簡單呢,是以我就把需要的屬性都放在了“表”裡面。一開始并沒有想到權限,後來才發現,隻要修改一下SQL語句,就可以達到“權限”的目的,包括資源權限。同理,也可以達到“個性化設定”的效果。是以我感覺權限、個性化設定隻是自然架構的一個副産品。當然你也可以說,通用權限和我的自定義控件綁定的太緊了,這個也沒有辦法,總之,先實作了需求再說,然後再想辦法解決侵入性的問題。
為了便于大家的了解,在說明這些表的時候舉一個舉一個具體的例子吧。SQL Server 2000裡面有一個 sysobjects 表,表裡面有一個xtype字段,這個字段是說明類型的,比如xtype=’U ’,表示使用者表,xtype=’V ’,表示視圖。在網上查了一下,發現這個xtype字段至少有16種值,我做了一個表“Manage_Base_TableType”來記錄這個資訊。是以我這裡就以這個表為例,說一下項目描述表組裡的幾個表的作用。
【Manage_Base_TableType的字段和資料】

項目描述表的說明
1、Manage_Function,功能節點表。這裡記錄了一個項目的所有的功能節點。通過這個表就可以看到這個項目可以做什麼。很有項目描述的味道吧。
【字段】
字段名 | 中文名 | 字段類型 | 大小 | 預設值 | 是否空 | 說明 |
FunctionID | 節點ID | int | 4 | 1 | 主鍵 | |
ParentID | 父節點ID | 員工姓名 | ||||
ParentIDPath | 父節點ID的路徑 | nvarchar | 30 | _ | ||
NoteTitle | 節點名稱 | 100 | ||||
PowerMark | 權限辨別 | 50 | 一般情況下等于FunctionID | |||
NoteLevel | 級數 | 第幾級節點 | ||||
IsShowNote | 節點是否顯示 | bit | 功能節點裡面是否顯示 | |||
IsShowPower | 角色是否顯示 | 角色選擇是否顯示 | ||||
Sort | 排序 | |||||
WebURL | 網址 | 打開網頁的網址 | ||||
Target | 目标 | 10 |
【示例】
這個表是權限到節點的關鍵表。下一章會詳細說明,其實大家應該也知道了。
2、Manage_Table,記錄資料庫裡的表的資訊。他主要是區分一個字段是屬于哪個表的。
TableID | 表 | |||||
TableName | 表名 | 60 | ||||
IDColumn | 主鍵名 | |||||
Type | 類型 | char | 2 | |||
Content | 表說明 | |||||
ExcelTableName | 工作表名稱 | 用于修改Excel裡面的資訊 |
3、Manage_Columns,記錄資料庫裡的表的字段的資訊。在原有的基礎上(字段名、字段類型、大小等),又增加了一些UI需要的資訊,比如控件類型、驗證方式等,就是說這個字段在表單裡面表現為什麼控件,這些是表單控件需要的資訊。
ColumnID | 字段辨別 | |||||
表ID | 外鍵 | |||||
ColSysName | 字段名稱 | 資料庫裡的名稱 | ||||
ColName | 對外名稱 | 顯示給使用者看的名稱 | ||||
ColType | 字段類型 | 20 | ||||
ColSize | 字段大小 | |||||
ControlKindID | 控件類型 | |||||
CheckKindID | 驗證類型 | |||||
CheckUserDefined | 自定義驗證 | 自行定義驗證的方式,通過正規表達式實作。 | ||||
ControlInfo | 控件描述 | 500 | 描述控件 | |||
ControlID | 控件ID | 在頁面裡的控件ID |
4、Manage_Function_Info,這裡記錄了分頁控件需要的屬性,還有節點的添加、修改、删除時需要的表。
FunctionTitle | 清單标題 | |||||
TableNameList | 清單用的表名 | |||||
TableNameExcel | 導出Excel用的表名 | |||||
ForeignColumn | 外鍵名 | 如果是從表的話,可以填寫外鍵表,用于顯示資料時候的過濾條件 | ||||
SQLKindID | 分頁算法 | |||||
PKColumn | ||||||
ShowColumns | 顯示的字段 | * | ||||
OrderColumns | 排序字段 | |||||
PageSize | 一頁記錄數 | |||||
QueryAlways | 固定的查詢條件 | 300 | ||||
Query | 第一次的查詢條件 | |||||
NaviCount | 頁号數量 | |||||
TableNameAdd | 添加資料用表 | |||||
TableNameUpdate | 修改資料用表 | |||||
TableNameView | 檢視資料用表 | |||||
TableNameDel | 删除資料用表 |
5、Manage_FunFindCol,記錄一個節點裡面的查詢控件需要的字段,又增加了查詢類型的字段。
FindColID | 序号 | |||||
外鍵,關聯節點 | ||||||
字段ID | 外鍵,關聯字段 | |||||
同一節點下的排序 | ||||||
FindKindID | 查詢方式 | 外鍵,查詢方式 | ||||
DefaultValue | 預設值 | 第一次顯示查詢的時候的字段的預設查詢關鍵字 | ||||
clearTDStart | 去掉開頭的TD | 合并到上一個TD,設定空格 | ||||
clearTDEnd | 去掉結尾的TD | 接收下一個TD | ||||
TDColspan | TD數 | 一個字段占用多少TD |
6、Manage_FunFormCol,記錄一個節點裡面的表單控件需要的字段,增加了提示資訊、控件狀态等字段。可以繪制表單
FormColID | ||||||
ColHelp | 提示資訊 | 出現在控件旁的提示資訊,比如“使用者名必須4-20個字元” | ||||
HelpStation | 提示資訊的位置 | 1:不顯示;2:左面;3:右面 | ||||
控件的預設值 | ||||||
ControlState | 控件狀态 | 1:正常;2:隻讀;3:不可用 | ||||
IsShow | 是否顯示 | 1:顯示;0:不顯示 | ||||
ClearTDStart | ||||||
ClearTDEnd | ||||||
7、Manage_FunListCol,記錄一個節點的資料清單需要的字段。可以用這個資訊繪制表格的表頭。
ListColID | ||||||
ColWidth | 列寬度 | TD的寬度 | ||||
ColAlign | 列對齊方式 | left | TD的對齊方式 | |||
Format | 格式化 | 對資訊進行格式化 | ||||
MaxLength | 最大字元數 | TD裡面最多顯示多少字元 |
8、Manage_ButtonBar,記錄了一個節點有哪些功能按鈕,比如添加、修改、删除、查詢等。可以添加任意功能的按鈕。可以繪制清單頁面裡的按鈕。
ButtonID | ||||||
BtnTitle | 按鈕标題 | 按鈕上面顯示的文字 | ||||
BtnID | 按鈕ID | 按鈕的ID | ||||
BtnTypeID | 按鈕類型 | |||||
URL | 打開的網址 | 240 | 單擊按鈕後打開的網頁 | |||
WebWidth | 打開視窗寬度 | |||||
WebHeight | 打開視窗高度 | |||||
IsNeedSelect | 是否需要選中資料 | 0:不需要;1:需要 | ||||