Main.ADOQuery1.SQL.Clear; //打開權限表,登錄的時候判斷。
Main.ADOQuery1.SQL.Add('Select Top 1 * From S_SysUser Where UserName=:UserName');
Main.ADOQuery1.Parameters.ParamByName('UserName').Value:=Trim(ComboBox1.Text);
Main.ADOQuery1.Open;
If Main.ADOQuery1.FieldByName('NewBtn').AsString='0' Then //判斷新增按鈕的值0/1
Begin
Main.NewBitbtn1.Visible:=False;
End;
//問題,是,如果這樣假設我有1000個按鈕,則需要寫1000條代碼
怎么能簡化一些,就能夠控制住每個按鈕是否可見呢?
uj5u.com熱心網友回復:
一個簡單的辦法是:把這個內容寫成一個通用的函式,輸入引數是用戶名、按鈕名(其實就是需要判斷的權限),回傳是否有權限。然后對每個按鈕進行判斷。
你要少寫代碼,可以將按鈕做一個繼承類,在新類里把權限判斷內容加上,然后使用新類。這外相對復雜點,對你來說可能用不上。
權限管理來說,整個體系做好的話還是挺復雜的,你用簡單的就好,以后再慢慢優化。
uj5u.com熱心網友回復:
那我這樣寫,會不會系統執行的效率太差了,代碼太多了。會影響性能不?
uj5u.com熱心網友回復:
怎么可能有1000個按鈕呢?要帶啊嗎簡單,可以:
var
i: integer;
ButtonVisible: boolean;
begin
//...
ButtonVisible := Main.ADOQuery1.FieldByName('NewBtn').AsString<>'0';
for i := 0 to Main.ControlCount - 1do
if Main.Controls[i] is TBitBtn then
Main.Controls[i].Visible := ButtonVisible;
uj5u.com熱心網友回復:
要代碼簡單uj5u.com熱心網友回復:
按鈕事件里先判斷權限再執行動作,或form進入之前判斷權限,沒權限的不讓進。各有優缺點,自己決定。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/277907.html
標籤:數據庫相關
下一篇:TDBGridEh的列的事件