Delphi - несколько пользователей (сессий) после входа в систему (FireDAC) - PullRequest
0 голосов
/ 20 мая 2018

Я работаю над настольным приложением Windows в Delphi, используя драйвер FireDAC и систему баз данных MSSQL.В настоящее время у меня проблема с пониманием того, как должны работать несколько сессий (пользователей).Прямо сейчас у меня есть три тестовых пользователя, и когда я вхожу в систему с любым из них, каждый сеанс имеет те же данные и функциональные возможности.Я не хочу этогоЯ хочу, чтобы каждый пользователь (каждый сеанс) имел разные данные и функциональные возможности.

Обратите внимание, что это отличается от распределенных систем, где задачи распределяются узлами в сети.Я не заинтересован в распределенной системе.У меня есть настольное приложение.

Может ли кто-нибудь объяснить, как этого добиться (разные пользователи (сеансы) = разные данные и функции)?

1 Ответ

0 голосов
/ 20 мая 2018

Вы указали в комментарии, что вы хотите, чтобы несколько пользователей могли видеть разные строки данных в одной и той же таблице или таблицах

Это на самом деле довольно просто: вам просто нужноопределить для каждого пользователя (или типа пользователя) критерии, которые определяют, какие строки данных они должны видеть, а затем написать предложение Where, которое выбирает только эти строки.Как правило, плохая идея жестко кодировать идентификационные данные пользователей в базе данных и какие данные им разрешено видеть и какие операции им разрешено выполнять с данными.

Трудно привести конкретный пример, не вдаваясь в детали того, что вы хотите сделать, но следующий простой пример может помочь.

Предположим, у вас есть таблица клиентов и один пользователь.предназначен для работы с США, второй пользователь имеет дело с Францией, а третий - с остальным миром.

В вашем приложении вы могли бы иметь перечислимый тип для представления этого:

type
  TRegion = (rtUSA, rtFR, rtRoW);  // RoW = Rest of the World

Затем вы можете написать функцию для генерации предложения Where оператора SQL Select, например:

function GetRegionWhereClause(const ARegion : TRegion) : String;
begin
  Result := ' Where ';
  case ARegion of
    rtUSA : Result := Result + ' Customer.Country = ''USA''';
    rtFR : Result := Result + ' Customer.Country = ''FR''';
    rtRoW : Result := Result + ' not Customer.Country in (''USA'', ''FR'')'
  end;  { case }
end;

Затем вы можете вызвать GetRegionWhereClause при создании Sql, чтобы открыть таблицу Customers..

Аналогичным образом определите для каждого типа пользователя, какие операции ему разрешено выполнять с данными (Обновить, Вставить, Удалить).Но реализация этого была бы скорее вопросом выборочного включения и отключения функций графического интерфейса в вашем приложении для выполнения задач в вопросе.

...