2

(我看到了 Demo Dirt - 但它用于 HTTP Web,我不知道如何将其切换到 TCP/IP)我是 Delphi 的新手 - 我需要有关使用 DataSnap 和客户端登录表单的帮助(从 SQL Server 检查用户密码) 然后申请角色。任何代码或答案将不胜感激提前谢谢

4

1 回答 1

1

如果您能更清楚地解释您想要做什么以及当前无法正常工作的内容,我将很乐意为您提供帮助。(你试图用应用程序完成什么,到目前为止你有什么身份验证,以及你到底坚持了什么。)

如果你想从头开始,这就是你要做的:

  • 使用“DataSnap Server”向导创建一个新的服务器项目。这将使用 Indy(而不是 WebBroker)并允许 TCP/IP 连接。(即使是重量级回调。)

  • 在向导中设置属性时,请确保选中“身份验证”选项(不需要“授权”。仅当您需要更复杂的身份验证/授权机制时。)

  • 打开向导生成的 ServerModule 单元,并切换到代码选项卡

  • 找到“DSAuthenticationManager1UserAuthenticate”功能(如果您在向导中选中了身份验证,则会自动添加。)

  • 在此功能中,进行身份验证...您可以访问用户名(“用户”)和密码(“密码”)。连接到数据库,查看是否有匹配的用户,以及该用户的角色。然后,使用用户拥有的所有角色填充传入此方法的 UserRoles 集合。

  • 一旦你为用户指定了角色,在你的服务器方法也允许或拒绝分配给他们的角色之前,这些角色什么都不做。您可以在设计时在对象检查器中的 TDSAuthenticationManager 组件中执行此操作。(服务器模块形式)。您可以修改一个角色集合。

  • 或者,您可以将代码中的属性添加到您的服务器方法。你可以把这个举个例子:

    [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/

我希望这会有所帮助。

于 2011-09-19T12:49:04.593 回答