【发布时间】:2017-10-04 20:31:05
【问题描述】:
我正在使用meteor-roles 包向应用程序添加角色功能。现在我正在尝试根据具有查看该产品类别的角色的用户过滤产品订阅。
我以为我可以使用mongo $where in meteor,但我只能将 $where 函数指定为无法访问角色包的序列化字符串。
将用户添加到角色以查看特定类别的示例。
Roles.addUsersToRoles(userIdA, 'view-product-category', 'product-category-a');
当前代码不起作用。当函数在 mongo 引擎中反序列化时,userId 不存在。
Meteor.publish('products', function () {
let userId = this.userId;
let query = {
$where: function () {
return Roles.userIsInRole(userId, 'view-product-category', `product-catogory-${this.category}`);
}.toString();
};
return Products.find(query);
});
如何根据值不同的集合过滤集合,我在这里尝试做什么?
目前的方向是自己序列化函数并将所需的值放在那里。我想知道是否有更通用和更强大的方法来对订阅进行这种 acl 访问过滤。
【问题讨论】:
-
为什么不显示一些代码?这让帮助变得更容易。
-
我认为这是一个范围界定问题,尽管我自己没有尝试过。你试过
var userId = this.userId吗? -
如前所述,userId 不存在。
var或let也没有关系。两个都试过了。将函数序列化为字符串并随后 mongo 反序列化它并使用eval执行它时,范围不保持。