210 lines
6.2 KiB
ObjectPascal
210 lines
6.2 KiB
ObjectPascal
{-----------------------------------------------------------------------------
|
|
The contents of this file are subject to the Mozilla Public License
|
|
Version 1.1 (the "License"); you may not use this file except in compliance
|
|
with the License. You may obtain a copy of the License at
|
|
http://www.mozilla.org/MPL/MPL-1.1.html
|
|
|
|
Software distributed under the License is distributed on an "AS IS" basis,
|
|
WITHOUT WARRANTY OF ANY KIND, either expressed or implied. See the License for
|
|
the specific language governing rights and limitations under the License.
|
|
|
|
The Original Code is: JvDBSecur.PAS, released on 2002-07-04.
|
|
|
|
The Initial Developers of the Original Code are: Fedor Koshevnikov, Igor Pavluk and Serge Korolev
|
|
Copyright (c) 1997, 1998 Fedor Koshevnikov, Igor Pavluk and Serge Korolev
|
|
Copyright (c) 2001,2002 SGB Software
|
|
All Rights Reserved.
|
|
|
|
Contributor(s):
|
|
Hofi
|
|
|
|
Last Modified: 2004-10-07
|
|
|
|
Changes:
|
|
2004-10-07:
|
|
* Added
|
|
TJvCustomLogin
|
|
property Caption to support a custom dialog Caption.
|
|
|
|
You may retrieve the latest version of this file at the Project JEDI's JVCL home page,
|
|
located at http://jvcl.sourceforge.net
|
|
|
|
Known Issues:
|
|
-----------------------------------------------------------------------------}
|
|
// $Id: JvBDESecurity.pas 10753 2006-06-28 08:12:28Z obones $
|
|
|
|
unit JvBDESecurity;
|
|
|
|
{$I jvcl.inc}
|
|
|
|
interface
|
|
|
|
uses
|
|
{$IFDEF UNITVERSIONING}
|
|
JclUnitVersioning,
|
|
{$ENDIF UNITVERSIONING}
|
|
SysUtils, Classes, DBTables,
|
|
JvLoginForm, JvBDELoginDialog, JvBDECheckPasswordForm;
|
|
|
|
type
|
|
TCheckUserEvent = function(UsersTable: TTable; const Password: string): Boolean of object;
|
|
|
|
TJvDBSecurity = class(TJvCustomLogin)
|
|
private
|
|
FDatabase: TDatabase;
|
|
FUsersTableName: TFileName;
|
|
FLoginNameField: string;
|
|
FSelectAlias: Boolean;
|
|
FOnCheckUser: TCheckUserEvent;
|
|
FOnChangePassword: TChangePasswordEvent;
|
|
FOnLoginFailure: TJvDBLoginEvent;
|
|
procedure SetDatabase(Value: TDatabase);
|
|
procedure SetUsersTableName(const Value: TFileName);
|
|
function GetLoginNameField: string;
|
|
procedure SetLoginNameField(const Value: string);
|
|
protected
|
|
function DoCheckUser(UsersTable: TTable; const UserName,
|
|
Password: string): Boolean; dynamic;
|
|
function DoLogin(var UserName: string): Boolean; override;
|
|
procedure Loaded; override;
|
|
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
|
|
public
|
|
constructor Create(AOwner: TComponent); override;
|
|
function ChangePassword: Boolean;
|
|
published
|
|
property Database: TDatabase read FDatabase write SetDatabase;
|
|
property LoginNameField: string read GetLoginNameField write SetLoginNameField;
|
|
property SelectAlias: Boolean read FSelectAlias write FSelectAlias default False;
|
|
property UsersTableName: TFileName read FUsersTableName write SetUsersTableName;
|
|
property Active;
|
|
property AllowEmptyPassword;
|
|
property AppStorage;
|
|
property AppStoragePath;
|
|
property AttemptNumber;
|
|
property Caption;
|
|
property MaxPasswordLen;
|
|
property UpdateCaption;
|
|
property OnCheckUser: TCheckUserEvent read FOnCheckUser write FOnCheckUser;
|
|
property OnChangePassword: TChangePasswordEvent read FOnChangePassword
|
|
write FOnChangePassword;
|
|
property AfterLogin;
|
|
property BeforeLogin;
|
|
property OnUnlock;
|
|
property OnUnlockApp;
|
|
property OnIconDblClick;
|
|
property OnLoginFailure: TJvDBLoginEvent read FOnLoginFailure write FOnLoginFailure;
|
|
end;
|
|
|
|
{$IFDEF UNITVERSIONING}
|
|
const
|
|
UnitVersioning: TUnitVersionInfo = (
|
|
RCSfile: '$URL: https://jvcl.svn.sourceforge.net/svnroot/jvcl/tags/JVCL3_32/run/JvBDESecurity.pas $';
|
|
Revision: '$Revision: 10753 $';
|
|
Date: '$Date: 2006-06-28 10:12:28 +0200 (mer., 28 juin 2006) $';
|
|
LogPath: 'JVCL\run'
|
|
);
|
|
{$ENDIF UNITVERSIONING}
|
|
|
|
implementation
|
|
|
|
|
|
constructor TJvDBSecurity.Create(AOwner: TComponent);
|
|
begin
|
|
inherited Create(AOwner);
|
|
FSelectAlias := False;
|
|
FLoginNameField := '';
|
|
end;
|
|
|
|
procedure TJvDBSecurity.Notification(AComponent: TComponent; Operation: TOperation);
|
|
begin
|
|
inherited Notification(AComponent, Operation);
|
|
if (Operation = opRemove) and (AComponent = Database) then
|
|
Database := nil;
|
|
end;
|
|
|
|
procedure TJvDBSecurity.Loaded;
|
|
begin
|
|
inherited Loaded;
|
|
if not (csDesigning in ComponentState) and Active and (Database <> nil) then
|
|
begin
|
|
Database.LoginPrompt := True;
|
|
if not Login then
|
|
TerminateApplication;
|
|
end;
|
|
end;
|
|
|
|
procedure TJvDBSecurity.SetDatabase(Value: TDatabase);
|
|
begin
|
|
if FDatabase <> Value then
|
|
begin
|
|
FDatabase := Value;
|
|
if Value <> nil then
|
|
Value.FreeNotification(Self);
|
|
end;
|
|
end;
|
|
|
|
procedure TJvDBSecurity.SetUsersTableName(const Value: TFileName);
|
|
begin
|
|
if FUsersTableName <> Value then
|
|
FUsersTableName := Value;
|
|
end;
|
|
|
|
function TJvDBSecurity.GetLoginNameField: string;
|
|
begin
|
|
Result := FLoginNameField;
|
|
end;
|
|
|
|
procedure TJvDBSecurity.SetLoginNameField(const Value: string);
|
|
begin
|
|
FLoginNameField := Value;
|
|
end;
|
|
|
|
function TJvDBSecurity.DoCheckUser(UsersTable: TTable;
|
|
const UserName, Password: string): Boolean;
|
|
var
|
|
SaveLoggedUser: string;
|
|
begin
|
|
if Assigned(FOnCheckUser) then
|
|
begin
|
|
SaveLoggedUser := LoggedUser;
|
|
try
|
|
SetLoggedUser(UserName);
|
|
Result := FOnCheckUser(UsersTable, Password);
|
|
finally
|
|
SetLoggedUser(SaveLoggedUser);
|
|
end;
|
|
end
|
|
else
|
|
Result := True;
|
|
end;
|
|
|
|
function TJvDBSecurity.DoLogin(var UserName: string): Boolean;
|
|
var
|
|
IconClick: TNotifyEvent;
|
|
begin
|
|
IconClick := OnIconDblClick;
|
|
if Assigned(IconClick) then
|
|
IconClick := DoIconDblClick;
|
|
Result := LoginDialog(Database, AttemptNumber, UsersTableName,
|
|
LoginNameField, MaxPasswordLen, DoCheckUser, IconClick, UserName,
|
|
AppStorage, AppStoragePath, SelectAlias, FOnLoginFailure, OnGetPassword);
|
|
end;
|
|
|
|
function TJvDBSecurity.ChangePassword: Boolean;
|
|
begin
|
|
Result := ChangePasswordDialog(Database, AttemptNumber, UsersTableName,
|
|
LoginNameField, LoggedUser, MaxPasswordLen, AllowEmptyPassword,
|
|
FOnChangePassword);
|
|
end;
|
|
|
|
{$IFDEF UNITVERSIONING}
|
|
initialization
|
|
RegisterUnitVersion(HInstance, UnitVersioning);
|
|
|
|
finalization
|
|
UnregisterUnitVersion(HInstance);
|
|
{$ENDIF UNITVERSIONING}
|
|
|
|
end.
|
|
|