【发布时间】:2017-11-19 19:05:24
【问题描述】:
我觉得我错过了什么。我试图定制我的产品 UI,以便某些项目只显示给管理员。此外,限制对路由器中某些“页面”的访问需要同步调用保护。我当然更喜欢保持异步,但这似乎不符合要求。
在其他环境中,我会创建一个类似于 isAdmin() 的布尔函数来检查用户授权/角色。但是由于出于安全原因用户不应该看到该功能的实现,因此最好使用仅限服务器的 Meteor 方法。虽然该方法可以在客户端同步(如果没有指定回调),但获取返回值的唯一方法是使用 Meteor.call() 的异步回调形式。
似乎有三种方法可以处理这个问题,没有一个像布尔函数那么简单:
- 从 isAdmin() 返回一个 Observable,但这会将问题排除在外 到调用 isAdmin() 的地方。它不能解决路由器保护问题。
- 在需要 isAdmin() 的地方执行 Meteor.call(),丢弃 isAdmin() 函数。这也将问题推向了所有的电话 站点,并且不解决路由器保护问题。
- 根本不返回值,而是让服务器端方法抛出 如果用户不是管理员,则例外。但是,这不会改变方法调用的异步性质。
我见过使用 Meteor.wrapAsync 或 Future 的示例,但这些使用的是服务器上的 Fiber,而不是客户端。
对其他模式的任何其他建议,也许使用 rxjs?谢谢。
【问题讨论】:
标签: javascript asynchronous meteor synchronization rxjs