通用權限管理系統組件 (GPM - General Permissions Manager) 中實現數據列的權限,附源碼


   我們經常需要實現靈活配置數據列的訪問權限控制,例如只有某些用戶可以看到“開戶行,銀行帳戶,公司稅號”等字段,其他用戶都不能訪問,也不能查看這幾個字段,類似的需求在通用權限管理系統里是如何實現的? 我們以圖文的方式把主要實現流程講解給大家。

   通用權限里追求的理念是,不依賴某個開發人員盡量能用工具實現,能重復利用,能經得起推敲,函數源碼可以重復利用,不管是才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( 255255128);
                }
            }
        }

         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: 直接在底層就實現字段權限,把數據在底層進行進行篩選處理。

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM