1

シナリオ: 多くの場合、ユーザー ID を使用してユーザーが表示できるデータをフィルター処理するクエリをアプリで実行します。ユーザー ID は整数です。ユーザーが単純にクエリ文字列を変更して、ユーザー ID パラメーターを別の # に変更できるようにしたくありません (そして、基本的に別のユーザーの ID を想定します)。認証プロセスを通じて、サーバーへの各リクエストには、ログイン時にクライアントに返されたヘッダーにセキュリティ トークンが含まれます。認証プロセス中に、このトークンはサーバーに保存され、ユーザーのユーザー ID にマップされます。

私がやりたいことは、ヘッダーからトークンを引き出し、ルックアップを行い、トークン値にマップされているユーザー ID を取得し (それが機能している)、クエリ文字列を変更してユーザー ID を追加することです。

したがって、リクエストは

http://localhost/api/app/customerlist

ユーザーIDを取得すると、次のようになります

http://localhost/api/app/customerlist?$filter=userid%20eq%1234

そして、続けます。

これは単純なシナリオですが、私の目標を示しています。データベースに代理キーを追加できず、GUID またはその他の値をフィルター列として使用できません。構造にはかなりこだわっています。

ありがとう

4

2 に答える 2

1

サーバー側では、返される IQueryable にフィルターを直接追加できます。Authorize 属性を使用すると、"User" 変数を介してユーザー データにアクセスすることもできます。

[BreezeController]
[Authorize]
public class NorthwindIBModelController : ApiController {

   [HttpGet]
   public IQueryable<Customer> CustomerList() {
     var userName = User.Identity.Name;

     var filter = filter on customers;
     var custs = ContextProvider.Context.Customers.Where({ some filter using userName});
   }

}

参照:
ASP.NET MVC 4 でユーザー名を Web Api メソッドに渡す

于 2013-10-19T22:22:45.037 に答える
0

EntityQuery.withParameters メソッドを見てください。クライアントからそれを使用すると、任意のクエリを取得して、それにユーザー ID フィルターを追加できます。何かのようなもの

 myQuery = myQuery.withParameters( { userId: 1234});
 myEntityManager.executeQuery(myQuery).then(...); 

それとも私は何かを逃していますか。

于 2013-10-19T02:29:32.383 に答える