天天看點

Delphi實作軟體中登入使用者的操作權限

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

    資料庫結構:包括兩張表BaseData和UserRightData,BaseData中是一張基本表,裡面不區分使用者,UserRightData是使用者權限表,結構和BaseData一樣,隻是多了使用者字段,增加使用者時,就是從BaseData表中複制資料到UserRightData中,并辨別使用者ID。

字段說明:

FucCode:該字段與控件tag對應

FucName:功能名稱

IsSel:是否有權限的标志

IsFuc:辨別該項是否是可以執行的功能

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

權限管理單元:UserRightCenter

<a></a>

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 

UserRightView; 

{ TUserRight } 

constructor TUserRight.Create(AConnection: TADOConnection); 

begin 

FConnection := AConnection; 

FData := TADOQuery.Create(nil); 

FData.Connection := FConnection; 

function TUserRight.CreateRightListByUserID(uid: Integer): Boolean; 

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; 

function TUserRight.DeleteRightListByUserID(uid: Integer): Boolean; 

FData.SQL.Text := 'delete from UserRightData where userid='+IntToStr(uid); 

function TUserRight.GetRightListByUserID(uid: Integer): Boolean; 

FData.SQL.Text := 'select * from UserRightData where UserID='+IntToStr(uid); 

FData.Open; 

function TUserRight.IsRightEnable(uid:Integer;fuccode: string): Boolean; 

FData.SQL.Text := 'select * from UserRightData where userid='+IntToStr(uid)+ 

' and fuccode='+fuccode; 

if (FData.IsEmpty) or (FData.FieldByName('IsSel').AsInteger = 0) then 

Result := False 

else 

procedure TUserRight.SetFunEnable(funid,uid,issel: Integer); 

FData.SQL.Text := 'update UserRightData set IsSel='+IntToStr(issel)+ 

' where UserID='+IntToStr(uid)+' and FucID='+IntToStr(funid); 

//這是現實權限管理界面的,也就是在上面設定使用者權限,這個大家可以根據自己的需要用不同的方式去展現 

procedure TUserRight.ShowUserRigthView(uid: Integer); 

var 

frm: TfrmUserRightView; 

frm := TfrmUserRightView.Create(nil); 

try 

frm.Caption := '使用者權限清單'; 

frm.SetUserRight(Self); 

Self.GetRightListByUserID(uid); 

frm.ShowModal; 

finally 

FreeAndNil(frm); 

end.

看一下主窗體的調用

unit Main; 

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs,UserRightCenter, StdCtrls, DB, ADODB; 

TfrmMain = class(TForm) 

Button1: TButton; 

Button2: TButton; 

Edit1: TEdit; 

Label1: TLabel; 

ADOConnection1: TADOConnection; 

Button3: TButton; 

procedure Button1Click(Sender: TObject); 

procedure FormCreate(Sender: TObject); 

procedure Button2Click(Sender: TObject); 

procedure Button3Click(Sender: TObject); 

{ Private declarations } 

FUserRight : TUserRight; 

{ Public declarations } 

frmMain: TfrmMain; 

{$R *.dfm} 

//現實使用者權限清單 

procedure TfrmMain.Button1Click(Sender: TObject); 

FUserRight.UserID := 1; 

FUserRight.ShowUserRigthView(1); 

procedure TfrmMain.FormCreate(Sender: TObject); 

//ADOConnection1是你的資料庫連接配接 

ADOConnection1.Open; 

FUserRight := TUserRight.Create(ADOConnection1); 

//建立使用者權限清單 

procedure TfrmMain.Button2Click(Sender: TObject); 

FUserRight.CreateRightListByUserID(StrToInt(Edit1.Text)); 

//測試,檢視權限,Button3的tag設定為10100003 

procedure TfrmMain.Button3Click(Sender: TObject); 

if FUserRight.IsRightEnable(1,IntToStr(TButton(Sender).Tag)) then 

ShowMessage('可以使用') 

ShowMessage('你沒有使用權限') 

以上都是最基本的操作,沒有考慮更多的細節,大家可以根據需要填充。

本文轉自黃聰部落格園部落格,原文連結:http://www.cnblogs.com/huangcong/archive/2010/11/09/1872848.html如需轉載請自行聯系原作者