0

我正在尝试使用 mongodb 为节点实现我自己的 acl 模块。我知道其中一些已经存在,但出于体验目的,我想创建自己的:)。

我们将有rolesusers。每个role都会有一些permissions上一些resource。每个role人也可能有一个父母角色。这个育儿部分目前正在阻止我。

1)我该如何实施?我读了另一篇将我指向 mongodb doc 的 SO 帖子:Embedding vs linking,所以我最好的方法似乎是使用引用来实现东西:

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 是一个已经这样做的节点模块。我看到他们为每个角色创建了一个集合。因为我可能有很多很多不同的角色,所以我决定避免使用这个解决方案,因为在 mongodb 文档中他们说当查询意味着少量集合时性能会更好。我的选择是否正确,避免使用这种方法?

谢谢。

4

0 回答 0