Я был бы рад помочь вам, если бы вы могли немного более четко объяснить, что вы хотите делать, а что в настоящее время не работает. (Что вы пытаетесь выполнить с приложением, что у вас есть для аутентификации и на чем именно вы застряли.)
Если вы хотите начать с нуля, вот что вы должны сделать:
Используйте мастер «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