Ich habe das in mehreren kommerziellen Applikationen wie folgt gelöst und fahre sehr gut damit:
Delphi-Quellcode:
begin
Application.Initialize;
if ( not Assigned( FPassword ) ) then
FPassword := TFPassword.Create( FPassword );
if ( not Session.Users.LoadFromFile( ApplicationPath +
c_ConfigDir + 'Users.xml' ) ) then
mBox( _( 'FEHLER!' ),
_( 'Ein Fehler beim Lesen der Benutzerdaten ist aufgetreten. '+
'Login NUR Superuser möglich. Abbruch!' ),
TRUE );
if ( FPassword.Check( mode_start, TRUE, FALSE ) = pass_ok ) then
begin
Application.CreateForm(TFUserManager, FUserManager);
Application.CreateForm(TFTrackoutManager, FTrackoutManager);
Application.Run;
end else
begin
Session.Free();
FPassword.Free();
end;
end.
Nachtrag! Die Funktion CHECK im Formular /
Unit "FPassword":
Delphi-Quellcode:
function TFPassword.Check( mode: TMode;
ShowCloseButton: Boolean;
ShowOKButtonOnly: Boolean = FALSE ): TPasswordResultType;
begin
result := pass_failed;
MayClose := FALSE;
PWResult := pass_failed;
accessmode := mode;
if ( ShowOKButtonOnly ) then
button_cancel.Enabled := FALSE
else
button_cancel.Enabled := TRUE;
if ( showCloseButton ) then
begin
button_cancel.ModalResult := mrAbort;
button_cancel.Caption := _( '&Beenden' );
end else begin
button_cancel.ModalResult := mrCancel;
button_cancel.Caption := _( '&Abbrechen' );
end;
// If the workstation has a valid login, quit here...
if ( Session.Active ) then
begin
if ( ( ( Session.CheckUserRights( mode ) ) AND
( Session.Users.Count > 0 ) ) OR
( Session.UserType = type_superuser ) ) then
begin
result := pass_ok;
exit;
end else
begin
if ( mBox( _( 'Zugriff verweigert!' ),
_( 'Sie besitzen nicht die nötigen Rechte, um auf diese ' +
'Resource zugreifen zu können. Wollen Sie den Vorgang ' +
'abbrechen?' ), FALSE ) ) then
exit;
end;
end;
self.ShowModal();
result := PWResult;
accessmode := mode_none;
resetInput();
close();
end;