TDBSecurity Component

Unit
DBSecur

Description
Компонента предоставляет два диалога, которые являются общеупотребимыми для приложений, работающих с базами данных.
Первый — диалог входа в программу с регистрацией пользователя (проверкой пароля, прав и т.д.) и открытием БД.
Второй — диалог смены пароля пользователя.
Компонента также может заблокировать Ваше приложение, минимизировав его, и потребовать от пользователя пароль для его разблокировки.



Purpose
Компонента обеспечивает три диалога
- для регистрации и открытия БД при входе в программу
- для смены пароля пользователем
- для ввода пароля при разблокировке программы, заблокированной методом Lock.
Tasks
Установите свойства Database, UsersTableName и LoginNameField, а также напишите обработку события OnCheckUser (при необходимости) для появления диалога регистрации при загрузке вашего приложения.

Если свойства UsersTableName и LoginNameField не заданы, то в таком виде компоненту можно использовать при соединении с SQL-сервером, который сам обеспечивает проверку прав пользователя.
Вызовите метод ChangePassword для предоставления пользователю возможности сменить его пароль.



Примеры работы и некоторые интересные свойства и методы.

Applies to
TDBSecurity component

Declaration
property UsersTableName: TFileName;

Description
Задает имя таблицы в БД Database, которая содержит информацию о пользователях. Поле LoginNameField в этой таблице должно содержать входные имена или идентификаторы пользователей, по которым их можно идентифицировать.


Applies to
TDBSecurity component

Declaration
property LoginNameField: string;

Description
Определяет имя поля в таблице с именем UsersTableName из БД Database, используемое для идентификации пользователя по введенному имени.

!!! Должен существовать индекс по этому полю.


Applies to
TDBSecurity component

Declaration
property OnCheckUser: TCheckUserEvent;

Description
Событие для проверки прав пользователя.
К моменту вызова этого события пользователь уже найден в таблице UsersTableName по введенному им имени и полю LoginNameField, то есть таблица UsersTable позиционирована на нужную запись.
Остается прочитать нужные поля и сделать вывод о результатах проверки, не забыв вернуть нужное логическое значение. Можно также сохранить где-нибудь необходимую информацию о текущем пользователе.

Событие вызывается и в том случае, если таблица UsersTableName не задана.
В обработчике события OnCheckUser Вы можете использовать значение свойства LoggedUser, которое содержит имя пользователя, введенное им в диалоге регистрации.


Applies to
TDBSecurity component

Declaration
function ChangePassword: Boolean;

Description
Вызывает диалог "Смена пароля". Важно правильно обработать событие OnChangePassword. Вы должны самостоятельно произвести в том событии все необходимые действия для смены пароля пользователя в базе данных. Например, вы можете выполнить соответствующий SQL-оператор или сделать необходимые изменения в таблицах БД.


Applies to
TDBSecurity component

Declaration
property OnChangePassword: TChangePasswordEvent;

Description
Событие для смены пароля.

К этому моменту проверено, что оба новых пароля совпадают, а UsersTable позиционирована на запись с текущим пользователем.
Нужно проверить, что введенный старый пароль валиден и произвести изменения в таблице.



Applies to
TDBSecurity component

Declaration
property Database: TDatabase;

Description
Указывает на компоненту TDatabase, задающую БД, которая, возможно, содержит таблицу UsersTableName с именами, паролями, правами и другой необходимой информацией о пользователях.




Applies to
TDBSecurity component

Declaration
procedure Lock;

Description
Метод предназначен для "блокирования" приложения.
При вызове метода Lock приложение минимизируется и при попытке восстановления его размеров выводит диалог ввода пароля. Вы можете обработать введенный пользователем пароль в событии OnUnlock.




Applies to
TDBSecurity component

Declaration
procedure Lock;

Description
Метод предназначен для "блокирования" приложения.
При вызове метода Lock приложение минимизируется и при попытке восстановления его размеров выводит диалог ввода пароля. Вы можете обработать введенный пользователем пароль в событии OnUnlock.




Applies to
TDBSecurity component

Declaration
property OnUnlock: TCheckUnlockEvent;

Description
Событие вызывается для проверки введенного пользователем пароля при разблокировании приложения, предварительно заблокированного методом Lock.
Вы должны вернуть False из вашего обработчика события OnUnlock для того, чтобы запретить разблокирование приложения.




Unit
DBSecur
Declaration
type
TCheckUnlockEvent = function(const Password: string): Boolean of object;
Description
Тип определен для события OnUnlock компоненты TDBSecurity.



Unit
DBSecur
Declaration
type
TChangePasswordEvent = function(UsersTable: TTable; const OldPassword, NewPassword: string): Boolean of object;
Description
Тип определен для события OnChangePassword компоненты TDBSecurity.



Example
function TMainForm.SecurityChangePassword(UsersTable: TTable;
const OldPassword, NewPassword: String): Boolean;
begin
Result := False;
if SecurityCheckUser(UsersTable, OldPassword) then begin
with UsersTable do begin
Edit;
FieldByName('PASSWORD').AsString := CryptString(PswdKey, NewPassword);

Post;
Result := True;
end;
end;
end;