2011-09-06 71 views
2

(我看到Demo Dirt - 但它用於HTTP Web,我不知道如何將其切換到TCP/IP) 我是新來的德爾福 - 我需要幫助關於使用DataSnap和客戶端登錄表單(從SQL Server檢查用戶密碼)然後應用角色。任何代碼或答案將欣賞 預先感謝Delphi XE Data Snap TCP/IP客戶端登錄表單

回答

1

如果你能更清楚地解釋你想要做什麼以及目前不能工作,我很樂意爲你提供幫助。 (你正在嘗試與應用程序來完成的,你有這麼遠的認證是什麼,以及你是卡在什麼)

如果你想從頭開始,這是你會怎麼做:

  • 使用「DataSnap Server」嚮導來創建新的服務器項目。這將使用Indy(而不是WebBroker)並將允許TCP/IP連接。 (即使是重量級回調)。

  • 在嚮導中設置屬性時,請務必檢查「Authentication」選項(不需要「Authorization」。只有當您需要更復雜的認證/授權機制時。 )

  • 打開向導生成,並切換到代碼標籤

  • 找到「DSAuthenticationManager1UserAuthenticate」功能(如果在嚮導檢查驗證自動添加ServerModule單元。)

  • 在此功能中,請進行身份驗證...您可以訪問用戶名(「用戶」)和密碼(「密碼」)。連接到數據庫,並查看是否有匹配的用戶以及用戶具有的角色。然後,使用用戶擁有的所有角色填充傳入此方法的UserRoles集合。

  • 一旦你在用戶上指定了角色,那些角色就不會做任何事情,除非你的服務器方法也允許或拒絕角色分配給他們。您可以在設計時在Object Inspector中的TDSAuthenticationManager組件中執行此操作。 (ServerModule表單)。有一個你可以修改的角色集合。

  • 或者,您可以將代碼中的屬性添加到您的服務器方法中。你可以把這個例如:

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

這將意味着EchoString只能由具有「管理」角色的用戶調用。

或者這樣:

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

這意味着任何人,除非與「管理」角色可以調用EchoString用戶。

或者這樣:

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

這意味着與「管理」,「客戶」,或「先生」作爲自己的一個角色(或任意組合)可以調用EchoString任何用戶。

注意:要使用TRoleAuth屬性,需要將DSAuth單元添加到您的uses子句中,否則角色屬性將被忽略。

在客戶端上,添加一個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/

我希望幫助。

墊子