Форма входа клиента Delphi XE Data Snap TCP / IP - PullRequest
2 голосов
/ 06 сентября 2011

(я видел Demo Dirt - но он используется для HTTP Web, и я не знаю, как переключить его на TCP / IP) Я новичок в Delphi - мне нужна помощь по использованию формы DataSnap и Client Login (проверьте пароль пользователя из SQL Server), а затем примените роль. Любой код или ответ будет оценен Заранее благодарен

1 Ответ

1 голос
/ 19 сентября 2011

Я был бы рад помочь вам, если бы вы могли немного более четко объяснить, что вы хотите делать, а что в настоящее время не работает. (Что вы пытаетесь выполнить с приложением, что у вас есть для аутентификации и на чем именно вы застряли.)

Если вы хотите начать с нуля, вот что вы должны сделать:

  • Используйте мастер «DataSnap Server» для создания нового проекта сервера. Это будет использовать Indy (вместо WebBroker) и позволит подключаться по TCP / IP. (даже для тяжеловесных обратных вызовов.)

  • При настройке свойств в мастере обязательно установите флажок «Аутентификация» («Авторизация» не требуется. Только если вам нужен более сложный механизм аутентификации / авторизации.)

  • Откройте модуль ServerModule, сгенерированный мастером, и перейдите на вкладку кода

  • Найдите функцию «DSAuthenticationManager1UserAuthenticate» (добавляется автоматически, если вы проверили аутентификацию в мастере.)

  • В этой функции выполните аутентификацию ... у вас есть доступ к имени пользователя («Пользователь») и паролю («Пароль»). Подключитесь к базе данных и посмотрите, есть ли соответствующий пользователь и какие роли у него есть. Затем заполните коллекцию UserRoles, переданную этому методу, всеми ролями, которые имеет пользователь.

  • Как только вы определяете роли для пользователя, они ничего не делают, пока методы вашего сервера также не разрешат или не запретят роли, назначенные им. Вы можете сделать это в компоненте TDSAuthenticationManager во время разработки в Инспекторе объектов. (Форма ServerModule). Существует коллекция ролей, которую вы можете изменить.

  • Или, вы можете добавить атрибуты в коде для методов вашего сервера. Вы можете поставить это например:

    [TRoleAuth('admin')]
    function EchoString(String: Value): String;
    

Это будет означать, что EchoString может быть вызван только пользователем с ролью 'admin'.

или это:

[TRoleAuth('', 'admin')]
function EchoString(String: Value): String;

Это значит, что любой, КРОМЕ пользователя с ролью администратора, может вызывать EchoString.

Или это:

[TRoleAuth('admin,guest,visitor')]
function EchoString(String: Value): String;

Что означает, что любой пользователь с «admin», «guest» или «посетителем» в качестве одной из своих ролей (или любой комбинации) может вызывать EchoString.

ПРИМЕЧАНИЕ. Чтобы использовать атрибут TRoleAuth, вам нужно добавить модуль DSAuth в ваше предложение использования, в противном случае атрибуты роли будут игнорироваться.

На клиенте добавьте компонент TSQLConnection. Установите драйвер на «Datasnap», затем разверните его. Установите значения хоста и порта. Подробнее об этом можно узнать здесь:

http://blogs.embarcadero.com/mathewd/2011/07/12/programmatically-set-datasnap-credentials-on-a-tsqlconnection/

Кроме того, я ранее писал в своем блоге об аутентификации: http://blogs.embarcadero.com/mathewd/2010/09/12/authentication-and-authorization-with-datasnap-and-rest/

Надеюсь, это поможет.

Mat

...