(私は Demo Dirt を見ました - しかし、それは HTTP Web に使用され、TCP/IP に切り替える方法がわかりません) 私は Delphi を初めて使用します - DataSnap とクライアント ログイン フォームの使用について助けが必要です (SQL Server からユーザー パスワードを確認してください) ) 次に、役割を適用します。コードまたは回答をいただければ幸いです よろしくお願いします
1 に答える
やりたいことと、現在機能していないことをもう少し明確に説明していただけると助かります。(アプリケーションで何を達成しようとしているのか、これまでに認証のために何を持っているのか、そして正確には何にこだわっているのか。)
ゼロから始めたい場合は、次のようにします。
「DataSnap サーバー」ウィザードを使用して、新しいサーバー プロジェクトを作成します。これにより、(WebBroker の代わりに) Indy が使用され、TCP/IP 接続が可能になります。(ヘビーウェイト コールバックの場合でも。)
ウィザードでプロパティを設定するときは、「認証」オプションを確認してください (「認証」は必須ではありません。より複雑な認証/承認メカニズムが必要な場合のみ)。
ウィザードが生成した ServerModule ユニットを開き、コード タブに切り替えます。
"DSAuthenticationManager1UserAuthenticate" 関数を見つけます (ウィザードで [認証] をオンにした場合は、自動的に追加されます)。
この機能では、認証を行います... ユーザー名 ("User") とパスワード ("Password") にアクセスできます。データベースに接続し、一致するユーザーがあるかどうか、およびユーザーが持っているロールを確認します。次に、このメソッドに渡された UserRoles コレクションに、ユーザーが持つすべてのロールを設定します。
ユーザーにロールを指定すると、サーバーメソッドがロールを許可または拒否するまで、ロールは何もしません。これは、オブジェクト インスペクタの設計時に TDSAuthenticationManager コンポーネントで行うことができます。(ServerModule フォーム)。変更できる Roles コレクションがあります。
または、コード内の属性をサーバー メソッドに追加することもできます。たとえば、次のように言えます。
[TRoleAuth('admin')] function EchoString(String: Value): String;
つまり、「admin」ロールを持つユーザーのみが EchoString を呼び出すことができます。
またはこれ:
[TRoleAuth('', 'admin')]
function EchoString(String: Value): String;
これは、「管理者」ロールを持つユーザーを除いて、誰でも EchoString を呼び出すことができることを意味します。
またはこれ:
[TRoleAuth('admin,guest,visitor')]
function EchoString(String: Value): String;
これは、「admin」、「guest」、または「visitor」を役割の 1 つ (または任意の組み合わせ) として持つすべてのユーザーが EchoString を呼び出すことができることを意味します。
注: TRoleAuth 属性を使用するには、DSAuth ユニットを uses 句に追加する必要があります。そうしないと、ロール属性が無視されます。
クライアントで、TSQLConnection コンポーネントを追加します。ドライバーを「Datasnap」に設定して展開します。ホストとポートの値を設定します。この設定の詳細については、こちらを参照してください。
また、以前に認証についてブログに投稿しました: http://blogs.embarcadero.com/mathewd/2010/09/12/authentication-and-authorization-with-datasnap-and-rest/
それが役立つことを願っています。
マット