Permissions 手动调用Collection.allow()检查权限
在Meteor JS中,我想在将对象添加到集合之前执行一项任务。因此,我创建了自己的方法,例如:addObject,如下所示: 但我注意到,.allow不再被调用,因为它是受信任的代码。问题是该方法在服务器上,但通过ObjectiveDDP从客户端调用,因此我仍然需要一种方法来验证客户端是否有权调用addObject-是否有任何方法可以手动调用。允许从我的服务器代码中调用集合?我试过了,但是出现了一个内部服务器错误,不确定语法应该是什么。。。在流星文件里找不到任何东西 编辑: 我刚刚发现这是可行的:Permissions 手动调用Collection.allow()检查权限,permissions,meteor,Permissions,Meteor,在Meteor JS中,我想在将对象添加到集合之前执行一项任务。因此,我创建了自己的方法,例如:addObject,如下所示: 但我注意到,.allow不再被调用,因为它是受信任的代码。问题是该方法在服务器上,但通过ObjectiveDDP从客户端调用,因此我仍然需要一种方法来验证客户端是否有权调用addObject-是否有任何方法可以手动调用。允许从我的服务器代码中调用集合?我试过了,但是出现了一个内部服务器错误,不确定语法应该是什么。。。在流星文件里找不到任何东西 编辑: 我刚刚发现这是可行
var allowedToInsert = MyColl._validators.insert.allow[0];
if (!allowedToInsert)
throw new Meteor.Error(403, 'Invalid permissions.');
但这可能是一个禁止调用私有方法的方法,比如_验证器。有人知道更“最佳实践”的方法吗?您可以使用addobject方法进行验证。例如,如果您只希望登录用户能够添加对象,则可以编写: 如果流星。用户抛出新流星。错误; 在addobject方法的开头 就我个人而言,我从不使用“允许”
另一方面,collection2和简单模式包通常对验证有很大帮助。您使用的验证模式可能不是最好的方法 如果您假设可以从客户端调用方法,那么您不应该“黑客”它去做它不打算做的事情 如果您正在调用更改数据库中数据的方法,则应在该方法中检查当前登录的用户是否具有这样做的权限 但是,您确定要执行此操作吗?Meteor还有Collection.allow和Collection.deny方法,您可以使用这些方法定义读取/写入/更新/删除权限。这是处理权限的推荐方法,因此您所做的是反模式。然而,也许在你的情况下,这是严格必要的?如果没有,您可能需要重新考虑用例
正如另一个回应所建议的,使用Collections或SimpleSchema之类的工具来验证数据结构也是一个好主意。请注意,由于Meteor仍处于测试阶段,访问私有元素通常是实现目标的最佳方式。主要的缺点是,在版本升级后,它们可能会停止工作。
var allowedToInsert = MyColl._validators.insert.allow[0];
if (!allowedToInsert)
throw new Meteor.Error(403, 'Invalid permissions.');