權限控制(delphi actionlist)

權限控制(delphi TActionList方案)
在軟件開發中,爲軟件加入權限控制功能,使不一樣的用戶有不一樣的使用權限,是很是重要的一項功能,
由其在開發數據庫方面的應用,這項功能更爲重要。
可是,要爲一個應用加入全面的權限控制功能,又怎樣實現呢?
你們知道,如今的應用,通常均以菜單訪問功能的形式出現,按照常規的作法,
只要讓註冊進入應用的不一樣用戶,能夠訪問不一樣的功能菜單,從而實現功能權限的控制,
可是,有這樣一個問題,此種方法便無能爲力,如今的應用軟件,爲了提升軟件的易操做性,
同一功能可能有多種不一樣的訪問方式,如工具條,右鍵菜單等;
一樣,同一個功能,也可能在軟件的不一樣地方被調用,而不單單被限制爲用程序的主菜單來調用,
這樣,才能保證應用的易用性。
寫到這,問題已經很是清楚,對於要限制的軟件功能,僅經過一次代碼設計,
不管在整個應用的任何地方或經過何種形式調用此功能,都能被功能權限所限制。數據庫

筆者利用Delphi平臺做應用開發時,經過Delphi7提供的VCL控件解決了這一問題。
在瞭解如何實現功能權限控制以前,得先看一下Delphi7提供的新控件TActionList,
經過TActionList,應用程序能夠統一管理其TAction,這裏的Action,能夠理解爲應用程序的功能。
在應用的設計期間,能夠經過TActionList編輯器將功能(Action)加入TActionList,
將Action加入TActionList後,就可能經過Object Inspector設置Action的屬性或爲其創建事件句柄。
在這裏,咱們能夠用Action的OnExecute事件句柄實現具體的功能,以下代碼來顯示一個操做窗體:數組

procedure TfrmMain.SetUserExecute(Sender: TObject);編輯器

begin工具

   frmUser.showModal;.net

end;設計

  當要限定這一功能時,可能利用TAction的Enabled,將其設爲False,此功能對於用戶將被屏蔽掉,
若是要此功能對用戶不可見,則能夠設定Visible爲False。orm

  當成功能的創建了TActionList後,可能有人問,若是使用其中的Action,
在Delphi7中,象TButton、TMenuItem、TSpeedButton、TRadioButton等控件,均有一個屬性Action,
正是經過它,咱們能夠將Menu或Button鏈接到TActionList中TAction,從而實現功能按鈕或菜單的功能。blog

在理解了Delphi中的TActionList及TAction以後,就能夠看看功能權限的具體實現方法。索引

第一步,創建兩張表,一張表存儲用戶信息,另外一張表存儲權限定義。事件

用戶信息表User結構以下:
UserID(String/用戶的ID號,爲表關鍵字)
UserName(String用戶名稱)
UserPassWord(String,用戶口令)

UserRight表結構以下:

UserID(String,用戶的ID號,爲表關鍵字)
ActionCaption(String,存儲功能的名稱,即Action的Caption屬性值)
ActionEnable(Boolean,存儲功能是否能夠訪問,即Action的Enable 屬性值)
ActionVisible(Boolean,存儲功能是否可見,即Action的visible屬性值)


第二步,增長用戶時填加用戶功能權限
當向User表中增長用戶時,須要向UserRight中增長功能設置記錄,先看看下面的實現代碼:

procedure TfrmUser.N1Click(Sender: TObject);

var

   i:Integer;

   Action:TAction;

begin

//Add Action into user right cds.

   with frmMain do begin

     for i:=0 to ActionList1.actioncount-1 do begin

       Action:=ActionList1.Actions[i];

      cdsUserRight.AppendRecord([cdsUser.FieldByName(’userName’).AsString,TAction(Action).Caption,TAction(Action).Enabled,i]);

    end;

  end;

end;

在這段代碼中,用到了TActionList的兩個屬性,一個是ActionCount,另外一個是Actions。
ActionCount表示TactionList中有多少功能,
即Action,Actions是一個數組屬性,
經過索引可能訪問每個TAction,從而能夠設置其具體的屬性,象上面提到的Enable及Visible,
從而達到限制的目的,經過這段代碼,將應用程序的全部功能都加入了UserRight表中。

第三步,能夠用Grid對上一步產生的表進行編輯操做

第四步,利用第2、三步產生的功能限制表UserRight,限制用戶的權限,
這能夠在應用程序的主窗體的OnCreate 中實現。

procedure TfrmMain.FormCreate(Sender: TObject);

const

   testUser=’yh’;

var

   cdsRight:TClientDataSet;

   i:Integer;

begin

  //set right of function

   cdsRight:=TClientDataSet.Create(self);

   try

   cdsRight.LoadFromFile(’Right.CDS’);

   cdsRight.AddIndex(’id’,’UserName;ActionCaption’,[],’’,’’,0);

   cdsRight.IndexName:=’id’;

  for i:=0 to ActionList1.ActionCount-1 do begin

     if cdsRight.FindKey([TestUser,TAction(ActionList1.Actions[i]).Caption]) then

     TAction(ActionList1.Actions[i]).Enabled:=cdsRight.FieldByName(’ActionEnable’).AsBoolean;

   end;

   finally

     cdsRight.Close;

     cdsRight.Free;

  end;

end;

這段代碼中,假設當前的用戶ID爲yh,同時只設定了功能的Enable屬性--------------------- 版權聲明:本文爲CSDN博主「姚軍權」的原創文章,遵循CC 4.0 by-sa版權協議,轉載請附上原文出處連接及本聲明。原文連接:https://blog.csdn.net/chinayaosir/article/details/4707217

相關文章
相關標籤/搜索