我們經常需要實作靈活配置資料列的通路權限控制,例如隻有某些使用者可以看到“開戶行,銀行帳戶,公司稅号”等字段,其他使用者都不能通路,也不能檢視這幾個字段,類似的需求在通用權限管理系統裡是如何實作的? 我們以圖文的方式把主要實作流程講解給大家。
通用權限裡追求的理念是,不依賴某個開發人員盡量能用工具實作,能重複利用,能經得起推敲,函數源碼可以重複利用,不管是才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);
這裡是控制表格的參考函數
public static void SetColumns(DataGridView dataGridView, string[] columns)
{
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: 直接在底層就實作字段權限,把資料在底層進行進行篩選處理。
希望以上實作的思路,可以起一些參考意義。
将權限管理、工作流管理做到我能力的極緻,一個人隻能做好那麼很少的幾件事情。
通用資訊化建設平台
關注 - 177
粉絲 - 1229 榮譽: 推薦部落格 +加關注 6 1 (請您對文章做出評價) « 部落客前一篇: 通用權限管理系統元件 (GPM - General Permissions Manager) 中實作統一身份認證(Single Sign On,單點登入)附源碼
» 部落客後一篇: C# NameValueCollection
- Categories: [01] 通用權限管理
Add your comment
5 條回複
-
#1樓 xuefly 2012-02-06 22:41
弄死方舟子,弄死周立波,一個人隻能做好那麼很少的幾件事情。 回複 引用 檢視 -
#2樓 卡啊可下[未注冊使用者]2012-02-07 08:30
@xuefly
這人 傻B 瘋了? 回複 引用
-
#3樓 wy24420 2012-02-07 08:43
有空學習,感謝樓主 回複 引用 檢視 -
#4樓 遊客111111111111111[未注冊使用者]2012-02-07 10:14
想問樓主一個問題:如果編輯方式是在一個窗體内進行新增編輯,而不是在網格内直接新增編輯,這樣怎麼去動态控制(隐藏或顯示)那些控件 回複 引用 -
#5樓 有一點難 2012-02-07 11:18
非常不錯。繼續學習研究中。 回複 引用 檢視
重新整理評論清單 重新整理頁面 傳回頂部 注冊使用者登入後才能發表評論,請 登入 或 注冊, 通路網站首頁。 程式員問答社群,解決您的IT難題 簡潔閱讀版式 網站首頁 博問 新聞 閃存 程式員招聘 知識庫
最新IT新聞:
· 微軟諾基亞聯盟之困
· Chrome浏覽器全球份額首次超過IE 僅保持一天
· CSDN就網站被黑案告破發表聲明
· 開發者應該關注的五項Web新興技術:WebGL和SVG名列其中
· 分析稱蘋果應當收購Twitter 強化社交元素
» 更多新聞...
最新知識庫文章:
· 如何編寫優質的需求文檔
· 版本控制工具曆史的10個裡程碑
· 如何成為一名優秀的C程式員
· 效率由心生,快速提高工作效率秘訣
· 文學與程式設計
» 更多知識庫文章...
China-pub 2011秋季教材巡展
China-Pub 計算機絕版圖書按需印刷服務
本文轉自jirigala_bao 51CTO部落格,原文連結:http://blog.51cto.com/jirigala/813083