0

mongodb を使用してノードに独自の acl モジュールを実装しようとしています。それらのいくつかはすでに存在していることを知っていますが、経験のために自分で作成したいと思います:)。

roles、およびがありusersます。それぞれroleにいくつかpermissionsのいくつかがありresourceます。それぞれroleに親の役割もある場合があります。この子育ての部分は現在私をブロックしています。

1)どうすればそれを実装できますか? mongodb doc: Embedding vs linking を指す別の SO 投稿を読んだので、参照を使用して実装するのが最善の方法のようです:

roles collection :
[{
  _id: "my_role_1"
 },
 {
  _id: "my_role_2",
  parents: ["my_role_1"]
},
 {
  _id: "my_role_3",
  parents: ["my_role_2"]
}]

それは正しい方法ですか?nodejs は非同期であるため、 my_role_3 (I mean my_role_3 -- my_role_2 -- my_role_1) の「親ツリー」を取得するのは悪夢です。

function getRoleParenting(roleName, callback) {
    this.db.collection('roles', function(err, collection) {
        collection.findOne({role: roleName}, function(err, role) {
            role.parents.forEach(function(roleParent) {
                // I know I should call the function recursively,
                // But I can't figure out how to get the full "tree"
                // at the end... In a sync way, I would use "return"...
                // How can I do here ?
                // getRoleParenting(roleParent._id);
            }
       });
    });
}

2)私が言ったように、node_aclはすでにそれを行っているノードモジュールです。役割ごとに 1 つのコレクションを作成していることがわかりました。私は非常に多くの異なる役割を担っている可能性があるため、このソリューションを回避することにしました。mongodb のドキュメントでは、クエリがいくつかのコレクションを意味する場合にパフォーマンスが向上すると述べているからです。この方法を避けて、私の選択は正しいですか?

ありがとう。

4

0 に答える 0