在很多的系統中,權限通常是被分成幾級的。每一級的用戶所能實現的操作是不同的,而實現這一功能的方法一般都是讓不同權限的用戶見到不同的菜單。簡單的說就是對不具有某一權限的用戶這一菜單就是不可見的!為了實現這一控制,程序員們往往得花費很多的時間去做這一模塊,浪費了很多寶貴的時間!
筆者的想法是:如果設一個二維數組,第一維代表第一級菜單,第二維代表子菜單,每一個數組元素只存儲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;