2017-05-05 3 views
1

管理者と標準ユーザーの2種類のユーザーがいるとします。ユーザー権限でRESTful APIでリソースをフィルタリングする最適な方法は何ですか?

私たちはpostというリソースを持っています。 GETメソッドの場合は、管理者にすべての投稿を表示させたいが、標準ユーザーは投稿のみを表示するようにします。post.created_by={currentUserID}

  • 使用/api/post/api/mypost

    は今、私は3つのオプションがあります。私は簡単に返された結果を制御し、ユーザーのスコープに基づいて異なる権限を割り当てることができます。欠点は、私はコードとドキュメントを繰り返します。

  • 両方とも/api/postを使用し、標準ユーザーの場合は?createdBy={id}がない場合は要求を拒否します。

  • /api/postを両方とも使用しますが、認証方法によって動作が異なります。標準的なユーザーの場合、返されるリストは常にフィルターされます。 /api/post/{id}の場合、ユーザーに属していない投稿に対してHTTP 403が返されます。

どちらを選択すればよいですか?

答えて

0

(あなたの言ったように)最初のオプションは、コードの重複を起こしやすいため、理想的ではありません。

もし2番目のものがcurrentUserIDだけでなく、それがうまく機能していれば、

ただし、いずれの方法でも認証を行う必要がある場合は、おそらく最も普及しているソリューションなので、3番目のオプションを選択してください。さまざまなユーザーは、アクセス許可/ポートフォリオに応じて、クリーンな方法で、URLのクエリ文字列を邪魔することなく、さまざまなものを参照します。

0

基本的に差がない、それだけでルーティングされる:/api/post又は/api/mypostを、/api/post/{id} = /api/post/{createdBy} = /api/post?createdby={id}。管理者用の管理領域だけを追加することもできます。

ただし、すべてのオプションに適用されるルールが1つあります。管理者はフルアクセス権を持ち、通常のユーザーは自分の投稿にのみアクセスできます。

Idが指定されていますが、一致する投稿が見つからない場合は、管理者とユーザーの両方に「見つかりません」と返します。

どちらを選択すればよいですか?

これは私の問題ではありません。それはあなたのデザインによって異なります。

コードをメンテナンスする必要があるため、アプリケーションを論理的(または機能的)な方法で構造化してください。冗長コードについては、(汎用)関数、拡張機能、または「HelperClasses」を使用してリポジトリを使用してみてください。

関連する問題