1. 程式人生 > 實用技巧 >黃聰:Delphi實現軟體中登入使用者的操作許可權

黃聰:Delphi實現軟體中登入使用者的操作許可權

經常在罈子裡看到有朋友問如何對軟體的登入使用者,進行許可權控制,可以設定到每一個選單或按鈕上,這裡來實現一個最普通的方法,通過資料庫,維護一個許可權列表(裡面有一個欄位和節目上選單項或Button等的tag對應),在執行時,通過到資料庫去查詢與之匹配的記錄是否開通,來決定使用者是否有許可權。

資料庫結構:包括兩張表BaseData和UserRightData,BaseData中是一張基本表,裡面不區分使用者,UserRightData是使用者許可權表,結構和BaseData一樣,只是多了使用者欄位,增加使用者時,就是從BaseData表中複製資料到UserRightData中,並標識使用者ID。

欄位說明:

FucCode:該欄位與控制元件tag對應

FucName:功能名稱

IsSel:是否有許可權的標誌

IsFuc:標識該項是否是可以執行的功能

FucPID:父節點ID,用來生成樹形結構時用

許可權管理單元:UserRightCenter

unit UserRightCenter;
    interface
    uses
    Windows, Messages, SysUtils, Classes, Forms, Dialogs,ADODB;    type
    TUserRight = class
      private
        FConnection : TADOConnection;
        FData: TADOQuery;
        FUserID: Integer;
      
public constructor Create(AConnection:TADOConnection);overload; //根據使用者id建立對應的許可權列表 function CreateRightListByUserID(uid:Integer):Boolean; //根據使用者id取得對應的許可權列表 function GetRightListByUserID(uid:Integer):Boolean; //根據使用者id刪除對應的許可權列表 function DeleteRightListByUserID(uid:Integer):Boolean; //
根據記錄id設定某個功能是否可用,funid:記錄id,uid:使用者ID,issel:是否可用 procedure SetFunEnable(funid,uid,issel:Integer); //判斷某個功能是否可用 function IsRightEnable(uid:Integer;fuccode:string):Boolean; procedure ShowUserRigthView(uid:Integer); property Connection: TADOConnection read FConnection; property Data: TADOQuery read FData; property UserID: Integer read FUserID write FUserID; end; implementation uses UserRightView; { TUserRight } constructor TUserRight.Create(AConnection: TADOConnection); begin FConnection := AConnection; FData := TADOQuery.Create(nil); FData.Connection := FConnection; end; function TUserRight.CreateRightListByUserID(uid: Integer): Boolean; begin Result := False; DeleteRightListByUserID(uid); FData.Close; FData.SQL.Text := 'insert into UserRightData(fucid,fucpid,fuccode,fucname,IsFuc,IsSel,userid) '+ 'select fucid,fucpid,fuccode,fucname,IsFuc,IsSel,'+IntToStr(uid)+' from BaseData'; FData.ExecSQL; Result := True; end; function TUserRight.DeleteRightListByUserID(uid: Integer): Boolean; begin Result := False; FData.Close; FData.SQL.Text := 'delete from UserRightData where userid='+IntToStr(uid); FData.ExecSQL; Result := True; end; function TUserRight.GetRightListByUserID(uid: Integer): Boolean; begin FData.Close; FData.SQL.Text := 'select * from UserRightData where UserID='+IntToStr(uid); FData.Open; end; function TUserRight.IsRightEnable(uid:Integer;fuccode: string): Boolean; begin FData.Close; FData.SQL.Text := 'select * from UserRightData where userid='+IntToStr(uid)+ ' and fuccode='+fuccode; FData.Open; if (FData.IsEmpty) or (FData.FieldByName('IsSel').AsInteger = 0) then Result := False else Result := True; end; procedure TUserRight.SetFunEnable(funid,uid,issel: Integer); begin FData.Close; FData.SQL.Text := 'update UserRightData set IsSel='+IntToStr(issel)+ ' where UserID='+IntToStr(uid)+' and FucID='+IntToStr(funid); FData.ExecSQL; end; //這是現實許可權管理介面的,也就是在上面設定使用者許可權,這個大家可以根據自己的需要用不同的方式去展現 procedure TUserRight.ShowUserRigthView(uid: Integer); var frm: TfrmUserRightView; begin frm := TfrmUserRightView.Create(nil); try frm.Caption := '使用者許可權列表'; frm.SetUserRight(Self); Self.GetRightListByUserID(uid); frm.ShowModal; finally FreeAndNil(frm); end; end; end.