1

我相信从安全角度来看,最好在两个地方处理对受限 URL 的访问:

  • 路由级别:确保没有人能够到达不允许的路由
  • 模板级别:在验证权限之前不会显示受限数据。

Iron-Router支持第一种方式,但是我想用Flow-Router.

我发现Meteor 的一篇文章:使用流路由器进行身份验证和权限Satya van He-men在 这篇文章中,他使用路由组和触发器按权限“过滤”路由。 但在这篇文章中,他使用 了, ,和对象的函数内部

Meteor.loggingIn()Meteor.userId()Meteor.user()Roles.userIsInRole() triggersEnter:FlowRouter


这些函数中的任何一个是否有可能在执行期间未定义triggersEnter
使用它们安全吗?
我喜欢文章中的模式,但想确保它可以安全使用(或者只需少量更改即可变得安全)

4

2 回答 2

1

我认为您担心的原因是有道理的,因为triggersEnter只调用一次我建议阅读有关模板级别的 Auth Logic Permission 的官方教程并且它是反应性的。

以前,我们在路由器层(特别是 Iron Router)中执行此操作。但是,这不是一个好的设计,我们不建议这样做。

https://kadira.io/academy/meteor-routing-guide/content/implementing-auth-logic-and-permissions

于 2015-11-01T13:22:45.153 回答
1

我还注意到,Roles.userIsInRole()以及其他与安全相关的函数可以undefined在函数中返回triggerEnter。由于我还注意到您提到的文章使用它们没有问题,因此我进行了调查。

这就是为什么,据我所知:如果您使用容器,则需要确保用户当前未在此级别登录,然后再在字段中加载任何模板(从而触发路由输入功能,没有Meteor.userId().

因此,只要您在容器中执行此类操作,您就可以使用所有与用户权限相关的功能triggerEnter,基本上只要用户登录,就可以防止加载任何模板:

  {{#if authInProcess}}
    <p>loading ...</p>
  {{else}}
    {{> Template.dynamic template=layout}} // load your template
  {{/if}}

有一个看起来像这样的助手:

authInProcess: function() {
    return Meteor.loggingIn();
  },

请注意,此代码取自那里:https ://kadira.io/academy/meteor-routing-guide/content/implementing-auth-logic-and-permissions

于 2016-05-02T10:17:54.587 回答