我們經常需要實現靈活配置數據列的訪問權限控制,例如只有某些用戶可以看到“開戶行,銀行帳戶,公司稅號”等字段,其他用戶都不能訪問,也不能查看這幾個字段,類似的需求在通用權限管理系統里是如何實現的? 我們以圖文的方式把主要實現流程講解給大家。
通用權限里追求的理念是,不依賴某個開發人員盡量能用工具實現,能重復利用,能經得起推敲,函數源碼可以重復利用,不管是才C\S, B\S 都可以重復利用的強大函數庫,不用總是推倒重來的嚴格數據庫架構,同時還可以兼容多種數據庫的目標,打造一個一勞永逸的通用權限管理系統,成為主流各種信息管理系統的核心第3方系統組件,我們不主張去做任何一個項目,但是我們的組件可以用在任何信息化項目里,我們為成千上萬的開發商提供服務。
程序的運行效果如下:
這個是通過調用列權限服務的SOA模式調用,然后對界面的表格數據進行一些處理,
1:把表格列過濾為只能訪問的列。
2:把可編輯的權限的列進行設置。
3:把拒絕訪問的列也可以剔除掉(參考)。
// 這里是當前用戶能訪問的列名
TableColumnsService tableColumnsService = new TableColumnsService();
string[] accessColumns = tableColumnsService.GetColumns( this.UserInfo, BaseBusinessCardTable.TableName, " Column.Access ");
// 設置為只能訪問的列
BaseInterfaceLogic.SetColumns( this.grdBusinessCard, accessColumns);
string[] editColumns = tableColumnsService.GetColumns( this.UserInfo, BaseBusinessCardTable.TableName, " Column.Edit ");
// 設置為可編輯列
BaseInterfaceLogic.SetEditColumns( this.grdBusinessCard, editColumns);
// 拒絕訪問的權限列名獲取
string[] deneyColumns = tableColumnsService.GetColumns( this.UserInfo, BaseBusinessCardTable.TableName, " Column.Deney ");
BaseInterfaceLogic.RemoveColumns( this.grdBusinessCard, deneyColumns);
這里是控制表格的參考函數
{
for ( int i = dataGridView.Columns.Count - 1; i > 0; i--)
{
if (dataGridView.Columns[i].DataPropertyName.Equals( " Selected "))
{
break;
}
if (!BaseBusinessLogic.Exists(columns, dataGridView.Columns[i].DataPropertyName))
{
dataGridView.Columns.RemoveAt(i);
}
}
}
public static void SetEditColumns(DataGridView dataGridView, string[] columns)
{
for ( int i = 0; i < dataGridView.Columns.Count; i++)
{
if (BaseBusinessLogic.Exists(columns, dataGridView.Columns[i].DataPropertyName))
{
dataGridView.Columns[i].ReadOnly = false;
dataGridView.Columns[i].DefaultCellStyle.BackColor = Color.FromArgb( 255, 255, 128);
}
}
}
public static void RemoveColumns(DataGridView dataGridView, string[] columns)
{
for ( int i = dataGridView.Columns.Count- 1; i > 0 ; i--)
{
if (BaseBusinessLogic.Exists(columns, dataGridView.Columns[i].DataPropertyName))
{
dataGridView.Columns.RemoveAt(i);
}
}
}
我們想順利的實現數據字段的權限,需要進行一下系統性的步驟:
1:首先需要用數據庫模型設計工具設計好數據庫結構中表結構,需要注意一些常用的關鍵字字段。
2:下圖是每個字段的注釋,這些注釋可以在設置表字段權限時會派上大用處,不用反復輸入基礎數據了。
3:我們用代碼生成器,進行相關的代碼,基礎配置數據的生成工作。
3:可以用代碼生成器工具直接生成基礎數據權限設置的功能,可以節省人工設置的煩惱。
4:運行相關自動生成腳本的效果如下:
5:我們用超級管理員,登錄系統進行相關的配置
6:我們設置用戶的表字段權限
7:超級管理員可以設置 “公開”列的配置, 然后可以給用戶配置相關的數據列權限了。
8:我們可以在獲取數據的底層函數里,直接過濾有訪問權限的字段,把沒有訪問權限的字段,直接在底層就進行移除掉,這樣系統的安全性會非常高了,可以滿足安全要求非常高的信息系統的要求。
文章頭部的幾個與字段權限有關的函數主要是處理界面效果用的,上圖主要是在功能函數的底層直接就把沒權限訪問的字段排除掉了。
字段權限:
a: 頁面上的字段權限實現。
b: 直接在底層就實現字段權限,把數據在底層進行進行篩選處理。
希望以上實現的思路,可以起一些參考意義。