在DELPHI中技巧實現權限管理
在運用DELPHI編製一些應用系統時,有很多時候都需要給不同的使用者不同的權限,而不同的系統又有不同的權限分配方式,如果在程式中去為每一位使用者分配權限的話,不僅使得程式的編制十分麻煩,而且也不利於管理!筆者近日想得一自認為比較好的方法,願與大家共享,並望各位多指教!
在很多的系統中,權限通常是被分成幾個等級的。每一級的使用者所能實現的操作是不同的,而實現這項功能的方法一般都是讓不同權限的使用者見到不同的選單。簡單的說就是對不具有某一權限的使用者這項選單就是不可見的!為了實現這項控制,程式設計師們往往得花很多的時間去做這個模組,浪費了很多寶貴的時間!
筆者的想法是:如果設一個二維數組,第一個維代表第一級菜單,第二維代表子菜單,每一個數組元素只存儲0或1這兩個數,某一權限的用戶對應著一個二維數組,而這個數組又代表了對應的選單。在給某一層級的使用者指派權限後,他便擁有了一個對應的陣列。登入時,從陣列中取出各個元素的值,如果為1則對應的選單出現,為0則不出現選單。用這種方式不但可以分級(同一級用戶的數組相同),還能實現在不同的用戶間實現權限細分,只要你修改對應的數值為0或1即可!
上面是一個簡單範例的運行結果。
下面是部分原始程式(這只是一個解釋性的範例程式),為了簡便,程式中只有一個窗體和一個主選單。在建立窗體時初始化數組M,顯示時讀出數組值並透過設定選單的Enabled屬性或Visible屬性的True或False來控制顯示! !
var
Form1: TForm1;
m:array[0..1,0..4] of integer;//定義儲存的陣列
i,j:integer;//定義迴圈的變數
implementation
{$R *.dfm}
PRocedure TForm1.FormShow(Sender: TObject);
begin //讀出數字並控制選單的顯示
for i:=Low(m) to High(m) do
for j:=Low(m[i]) to High(m[i]) do begin
if m[i][j]=0 then MainMenu1.Items[i].Items[j].Enabled:=false
else MainMenu1.Items[i].Items[j].Enabled:=true;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin //下面是初始化
k:=0;
for i:=Low(m) to High(m) do
for j:=Low(m[i]) to High(m[i]) do
if (j mod 2)=0 then m[i][j]:=1
else m[i][j]:=0;
end;