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 のドキュメントでは、クエリがいくつかのコレクションを意味する場合にパフォーマンスが向上すると述べているからです。この方法を避けて、私の選択は正しいですか?
ありがとう。