9

私は nodejs を使用しており、先週 acl/authorization を調査しています。いくつかしか見つかりませんでしたが、必要なすべての機能を備えているものはないようです。最も近いのはhttps://github.com/OptimalBits/node_aclですが、ID によるリソースの保護をサポートしているとは思いません (たとえば、ユーザー 12345 とユーザー 12345 のみに user/12345/edit へのアクセスを許可したい場合) )。したがって、自分用にカスタム ACL ソリューションを作成する必要があると思います。

これに関する私の質問は、各ユーザーを承認ルールにマップする別のコレクション/テーブルを作成するのではなく、各ユーザー オブジェクトの下にロール (ユーザー、管理者、モデレーターなど) を格納することの長所と短所は何ですか? node_acl は別のコレクションを使用しますが、他のコレクションのほとんどはユーザー オブジェクトのロール配列に依存します。

ちなみに今Mongodbを使っています。ただし、認証にリレーショナル データベースと非リレーショナル データベースを使用することの長所と短所はまだ調査していません。そのため、答えがそれに依存するかどうかを教えてください。

これを書いていて、ふと思ったこと。ロールを別のコレクションに保存すると、より移植性が高くなります。ACLシステムをもっと簡単に交換できます。(おもう?)

4

2 に答える 2

10

ここでの質問は、「ロールをどこに保存すればよいか」から「関連情報を Mongo (または一般的に NoSQL) に保存する方法」に抽象化できるようです。これは、関係対非関係モデリングの問題です。

非リレーショナル

Node + Mongo を使用してユーザーにロールを保存すると、「ロール」プロパティを調べるだけで、ユーザーが機能にアクセスできるかどうかを簡単に判断できます。トレードオフは、多くの重複した情報があり ('user_read' はすべてのユーザー アカウントの役割である可能性があります)、そのプロパティを変更することになった場合は、すべてのユーザー オブジェクト内で更新する必要があることです。

ロールを独自のコレクションに保存し、そのエントリの ID を User モデルの Roles コレクションに保存することもできますが、コレクションから実際のレコードを取得して、その情報を表示する必要があります (おそらくこれはまれなケースかもしれません)

関連した

これらをリレーショナルDBに保存することは、テーブル間の関係を確立できるという点で、より「伝統的な」アプローチになります(FK/結合テーブルなどを介して)。これ良い解決策になる可能性がありますが、NoSQL データベースを使用するメリットがなくなります。

概要

アプリの残りの部分が Mongo に保存されていて、(パフォーマンスやその他の制約のために) そこにとどまる必要がある場合は、すべて Mongo で行う方がよいでしょう。私が遭遇したアドバイスのほとんどは、データ ストアを混在させたり一致させたりしないでください。たとえば、どちらか一方を使用し、両方を使用しないでください。そうは言っても、私は両方のプロジェクトを行ってきましたが、面倒になることもありますが、長所が短所を上回ることもあります.

于 2013-01-12T18:03:16.583 に答える