天天看點

通用權限管理系統元件 (GPM - General Permissions Manager) 中實作資料列的權限,附源碼...

我們經常需要實作靈活配置資料列的通路權限控制,例如隻有某些使用者可以看到“開戶行,銀行帳戶,公司稅号”等字段,其他使用者都不能通路,也不能檢視這幾個字段,類似的需求在通用權限管理系統裡是如何實作的? 我們以圖文的方式把主要實作流程講解給大家。

   通用權限裡追求的理念是,不依賴某個開發人員盡量能用工具實作,能重複利用,能經得起推敲,函數源碼可以重複利用,不管是才C\S, B\S 都可以重複利用的強大函數庫,不用總是推倒重來的嚴格資料庫架構,同時還可以相容多種資料庫的目标,打造一個一勞永逸的通用權限管理系統,成為主流各種資訊管理系統的核心第3方系統元件,我們不主張去做任何一個項目,但是我們的元件可以用在任何資訊化項目裡,我們為成千上萬的開發商提供服務。  

   程式的運作效果如下:

通用權限管理系統元件 (GPM - General Permissions Manager) 中實作資料列的權限,附源碼...

這個是通過調用列權限服務的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:首先需要用資料庫模型設計工具設計好資料庫結構中表結構,需要注意一些常用的關鍵字字段。

通用權限管理系統元件 (GPM - General Permissions Manager) 中實作資料列的權限,附源碼...

2:下圖是每個字段的注釋,這些注釋可以在設定表字段權限時會派上大用處,不用反複輸入基礎資料了。

通用權限管理系統元件 (GPM - General Permissions Manager) 中實作資料列的權限,附源碼...

3:我們用代碼生成器,進行相關的代碼,基礎配置資料的生成工作。

通用權限管理系統元件 (GPM - General Permissions Manager) 中實作資料列的權限,附源碼...

3:可以用代碼生成器工具直接生成基礎資料權限設定的功能,可以節省人工設定的煩惱。

通用權限管理系統元件 (GPM - General Permissions Manager) 中實作資料列的權限,附源碼...

4:運作相關自動生成腳本的效果如下:

通用權限管理系統元件 (GPM - General Permissions Manager) 中實作資料列的權限,附源碼...

5:我們用超級管理者,登入系統進行相關的配置

通用權限管理系統元件 (GPM - General Permissions Manager) 中實作資料列的權限,附源碼...

6:我們設定使用者的表字段權限

通用權限管理系統元件 (GPM - General Permissions Manager) 中實作資料列的權限,附源碼...

7:超級管理者可以設定 “公開”列的配置, 然後可以給使用者配置相關的資料列權限了。

通用權限管理系統元件 (GPM - General Permissions Manager) 中實作資料列的權限,附源碼...

8:我們可以在擷取資料的底層函數裡,直接過濾有通路權限的字段,把沒有通路權限的字段,直接在底層就進行移除掉,這樣系統的安全性會非常高了,可以滿足安全要求非常高的資訊系統的要求。

通用權限管理系統元件 (GPM - General Permissions Manager) 中實作資料列的權限,附源碼...

文章頭部的幾個與字段權限有關的函數主要是處理界面效果用的,上圖主要是在功能函數的底層直接就把沒權限通路的字段排除掉了。

字段權限:

   a: 頁面上的字段權限實作。

   b: 直接在底層就實作字段權限,把資料在底層進行進行篩選處理。

希望以上實作的思路,可以起一些參考意義。

将權限管理、工作流管理做到我能力的極緻,一個人隻能做好那麼很少的幾件事情。

通用權限管理系統元件 (GPM - General Permissions Manager) 中實作資料列的權限,附源碼...

通用資訊化建設平台

關注 - 177

粉絲 - 1229 榮譽: 推薦部落格 +加關注 6 1 (請您對文章做出評價) « 部落客前一篇: 通用權限管理系統元件 (GPM - General Permissions Manager) 中實作統一身份認證(Single Sign On,單點登入)附源碼

» 部落客後一篇: C# NameValueCollection

通用權限管理系統元件 (GPM - General Permissions Manager) 中實作資料列的權限,附源碼...
  • Categories: [01] 通用權限管理

Add your comment

5 條回複

  1. #1樓 xuefly      2012-02-06 22:41
    弄死方舟子,弄死周立波,一個人隻能做好那麼很少的幾件事情。   回複  引用  檢視   
  2. #2樓 卡啊可下[未注冊使用者]2012-02-07 08:30

    @xuefly

    這人 傻B 瘋了?   回複  引用   

  3. #3樓 wy24420      2012-02-07 08:43
    有空學習,感謝樓主   回複  引用  檢視   
  4. #4樓 遊客111111111111111[未注冊使用者]2012-02-07 10:14
    想問樓主一個問題:如果編輯方式是在一個窗體内進行新增編輯,而不是在網格内直接新增編輯,這樣怎麼去動态控制(隐藏或顯示)那些控件   回複  引用   
  5. #5樓 有一點難      2012-02-07 11:18
    非常不錯。繼續學習研究中。   回複  引用  檢視   

  重新整理評論清單 重新整理頁面 傳回頂部 注冊使用者登入後才能發表評論,請  登入 或  注冊, 通路網站首頁。 程式員問答社群,解決您的IT難題 簡潔閱讀版式 網站首頁 博問 新聞 閃存 程式員招聘 知識庫  

最新IT新聞

:

·  微軟諾基亞聯盟之困

·  Chrome浏覽器全球份額首次超過IE 僅保持一天

·  CSDN就網站被黑案告破發表聲明

·  開發者應該關注的五項Web新興技術:WebGL和SVG名列其中

·  分析稱蘋果應當收購Twitter 強化社交元素

»  更多新聞...

最新知識庫文章

:

·  如何編寫優質的需求文檔

·  版本控制工具曆史的10個裡程碑

·  如何成為一名優秀的C程式員

·  效率由心生,快速提高工作效率秘訣

·  文學與程式設計

  »  更多知識庫文章...

通用權限管理系統元件 (GPM - General Permissions Manager) 中實作資料列的權限,附源碼...

China-pub 2011秋季教材巡展

China-Pub 計算機絕版圖書按需印刷服務

    本文轉自jirigala_bao 51CTO部落格,原文連結:http://blog.51cto.com/jirigala/813083