12

さまざまなソースからのデータを統合してユーザーに表示するフィードである webapp を実装したいと考えています。ユーザーは、読み取り権限を持っているフィード アイテムのみを表示できる必要があります (たとえば、ユーザーがメンバーであるプロジェクトに属しているなどの理由で)。ただし、フィード アイテムは多くのユーザーに表示される可能性があります (表示される可能性があります)。

私は本当に CouchDB を使いたいと思っています (主にクールな _changes フィードと map/reduce ビューのためです)。アプリを純粋なcouchappとして実装することを考えていましたが、権限モデルに問題があります. 私の知る限り、CouchDB にはドキュメントごとのアクセス許可はなく、これは通常、ユーザーごとのデータベースとレプリケーションを使用して実装されます。

しかし、さまざまなユーザーが見ているものの間に多くの重複がある場合、それは多くのオーバーヘッドをもたらします... ものはいたるところに複製され、多くのデータベースで複製されます. このアプローチの優雅さは気に入っていますが、膨大なオーバーヘッドが契約違反のように感じます... (たとえば、50 人のユーザーがいて、全員が同じデータを見ているとしましょう...)。

それについてのアイデアはありますか?代替ソリューション?

4

2 に答える 2

8

CouchDB Authorization on a Per-Database Basis で説明されているように、読み取り権限を適用できます。

書き込み権限については、 CouchDB The Definitive Guide - Securityで説明されている検証関数を使用できます。

プロジェクトごとにデータベースを作成し、そこに権限を適用すると、すべてのデータがユーザー間で効率的に共有されます。ユーザーが自分自身でフィードを共有していて、そのフィードに対する権限も必要な場合は、ユーザーを「プロジェクト」にすることができるため、同じロジックがどこにでも適用されます。

この設計を使用して、プロジェクトごとにユーザーまたはユーザーのグループ (ロール) を承認できます。

于 2012-07-27T11:15:03.200 に答える
4

victorsavu3がすでに示唆しているように)アプリとCouchの間のプロキシで読み取り認証を処理する以外に、私が考えることができる他の2つの選択肢しかありません。

まず、気にしないでください。ディスクは安価であり、データの複数のコピーがあると、多くの不要な重複のように見えるかもしれませんが、アーキテクチャが大幅に簡素化され、負荷を処理するための簡単なスケールアップなどの自動化された利点が得られます(一部を移動するだけで)ユーザーのDBを他のサーバーに転送します)。

2つ目は、共有データを別のDBに分割することです。これにより、ビューで実行できることが制限される場合があります(たとえば、「リンクされたドキュメント」がない場合)が、多くの状況で大したことではありません。

于 2012-07-30T23:17:55.713 に答える