📄 iduseraccounts.pas
字号:
var
LUserHandle: TIdUserHandle;
Begin
Result := IsRegisteredUser(AuthenticateUser(AUsername, APassword, LUserHandle));
LogoffUser(LUserHandle);
End;//AuthenticateUser
function TIdCustomUserManager.AuthenticateUser(const AUsername, APassword: String; var VUserHandle: TIdUserHandle): TIdUserAccess;
var
LPassword: String;
Begin
LPassword := APassword;
VUserHandle := IdUserHandleNone;
Result := IdUserAccessDenied;
DoBeforeAuthentication(AUsername, LPassword, VUserHandle, Result);
DoAuthentication(AUsername, LPassword, VUserHandle, Result);
DoAfterAuthentication(AUsername, LPassword, VUserHandle, Result);
End;//
class function TIdCustomUserManager.IsRegisteredUser(AUserAccess: TIdUserAccess): Boolean;
Begin
Result := AUserAccess>=0;
End;
procedure TIdCustomUserManager.DoBeforeAuthentication(const AUsername: String; var VPassword: String;
var VUserHandle: TIdUserHandle; var VUserAccess: TIdUserAccess);
Begin
if Assigned(FOnBeforeAuthentication) then begin
FOnBeforeAuthentication(SELF,AUsername,VPassword,VUserHandle,VUserAccess);
end;
End;//
procedure TIdCustomUserManager.DoAfterAuthentication(const AUsername: String; var VPassword: String;
var VUserHandle: TIdUserHandle; var VUserAccess: TIdUserAccess);
Begin
if Assigned(FOnAfterAuthentication) then begin
FOnAfterAuthentication(SELF,AUsername,VPassword,VUserHandle,VUserAccess);
end;
End;//
function TIdCustomUserManager.GetOptions: TIdCustomUserManagerOptions;
Begin
Result := [];
End;//
procedure TIdCustomUserManager.SetOptions(const AValue: TIdCustomUserManagerOptions);
Begin
End;
procedure TIdCustomUserManager.SetDomain(const AValue: String);
begin
if FDomain<>AValue then begin
FDomain := AValue;
end;
end;
procedure TIdCustomUserManager.LogoffUser(AUserHandle: TIdUserHandle);
Begin
DoLogoffUser(AUserHandle);
End;//free resources, unallocate handles, etc...
//=============================================================================
procedure TIdCustomUserManager.DoLogoffUser(var VUserHandle: TIdUserHandle);
Begin
if Assigned(FOnLogoffUser) then begin
FOnLogoffUser(SELF, VUserHandle);
end;
End;//
function TIdCustomUserManager.ChallengeUser(var VIsSafe : Boolean;
const AUserName: String): String;
begin
VIsSafe := True;
Result := '';
end;
procedure TIdCustomUserManager.UserDisconnected(const AUser: String);
begin
end;
{ TIdUserAccount }
function TIdUserAccount.CheckPassword(const APassword: String): Boolean;
begin
if (Collection as TIdUserAccounts).CaseSensitivePasswords then begin
Result := Password = APassword;
end else begin
Result := TextIsSame(Password, APassword);
end;
end;
constructor TIdUserAccount.Create(ACollection: TCollection);
begin
inherited Create(ACollection);
FAttributes := TIdStringList.Create;
FAccess := IdUserAccountDefaultAccess;
end;
destructor TIdUserAccount.Destroy;
begin
FreeAndNil(FAttributes);
inherited Destroy;
end;
procedure TIdUserAccount.SetAttributes(const AValue: TIdStrings);
begin
FAttributes.Assign(AValue);
end;
procedure TIdUserAccount.SetPassword(const AValue: String);
begin
FPassword := AValue;
end;
{ TIdUserAccounts }
constructor TIdUserAccounts.Create(AOwner: TIdUserManager);
begin
inherited Create(AOwner, TIdUserAccount);
end;
function TIdUserAccounts.GetAccount(const AIndex: Integer): TIdUserAccount;
begin
Result := TIdUserAccount(inherited Items[AIndex]);
end;
function TIdUserAccounts.GetByUsername(const AUsername: String): TIdUserAccount;
var
i: Integer;
begin
Result := nil;
if CaseSensitiveUsernames then begin
for i := 0 to Count - 1 do begin
if AUsername = Items[i].UserName then begin
Result := Items[i];
Break;
end;
end;
end
else begin
for i := 0 to Count - 1 do begin
if TextIsSame(AUsername, Items[i].UserName) then begin
Result := Items[i];
Break;
end;
end;
end;
end;
procedure TIdUserAccounts.SetAccount(const AIndex: Integer; AAccountValue: TIdUserAccount);
begin
inherited SetItem(AIndex, AAccountValue);
end;
function TIdUserAccounts.Add: TIdUserAccount;
begin
Result := inherited Add as TIdUserAccount;
end;
{ IdUserAccounts - Main Component }
procedure TIdUserManager.InitComponent;
begin
inherited;
FAccounts := TIdUserAccounts.Create(Self);
end;
destructor TIdUserManager.Destroy;
begin
FreeAndNil(FAccounts);
inherited Destroy;
end;
procedure TIdUserManager.DoAuthentication(const AUsername: String; var VPassword: String;
var VUserHandle: TIdUserHandle; var VUserAccess: TIdUserAccess);
var
LUser: TIdUserAccount;
begin
VUserHandle := IdUserHandleNone;
VUserAccess := IdUserAccessDenied;
LUser := Accounts[AUsername];
if Assigned(LUser) then begin
if LUser.CheckPassword(VPassword) then begin
VUserHandle := LUser.ID;
VUserAccess := LUser.Access;
end;
end;
end;
procedure TIdUserManager.SetAccounts(AValue: TIdUserAccounts);
begin
FAccounts.Assign(AValue);
end;
function TIdUserManager.GetOptions: TIdCustomUserManagerOptions;
Begin
Result := [];
if FAccounts.CaseSensitiveUsernames then begin
Include(Result, umoCaseSensitiveUsername);
end;
if FAccounts.CaseSensitivePasswords then begin
Include(Result, umoCaseSensitivePassword);
end;
End;//
procedure TIdUserManager.SetOptions(const AValue: TIdCustomUserManagerOptions);
Begin
FAccounts.CaseSensitiveUsernames := umoCaseSensitiveUsername in AValue;
FAccounts.CaseSensitivePasswords := umoCaseSensitivePassword in AValue;
End;//
{ TIdSimpleUserManager }
procedure TIdSimpleUserManager.DoAuthentication(const AUsername: String; var VPassword: String;
var VUserHandle: TIdUserHandle; var VUserAccess: TIdUserAccess);
Begin
if Assigned(FOnAuthentication) then begin
FOnAuthentication(SELF,AUsername,VPassword,VUserHandle,VUserAccess);
end;
End;//
function TIdSimpleUserManager.GetOptions: TIdCustomUserManagerOptions;
Begin
Result := FOptions;
End;//
procedure TIdSimpleUserManager.SetOptions(
const AValue: TIdCustomUserManagerOptions);
Begin
FOptions := AValue;
End;//
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -