Ember.js身份验证、推送状态和路由

3

我想知道有没有人对Ember.js与路由和pushstate的结合有什么想法。

典型的Ember身份验证示例如下:

aStateManager = Em.StateManager.create({
    initialState: 'unauthenticated',
    authenticated: Em.State.create({}),
    unauthenticated: Em.State.create({
      authenticate: function(stateManager, context){
        stateManager.goToState('authenticated')
      }
    })
  })

  aStateManager.send('authenticate')

如果用户始终被发送到根网址,则可以起作用。但是,如果用户将url键入地址栏,例如“/api/resource/1”,是否有办法在每个状态下告诉用户是否已通过身份验证?

我想我正在寻找一个类似于Rails的before_filter。

是否有人为这种常见情况提供了解决方案?

1个回答

1
我们将面临的身份验证问题是用户可以完全访问所有模型并更改其中的数据,赋予自己之前没有的权限。每次与服务器联系都会很麻烦。
我能想到的一个解决方案是使用 freezable mixin 和对象的 isDirty 标志。我们可以将用户权限作为 DS 模型(如果我们正在使用 Ember Data),然后将其定义为冻结状态。现在,我们创建一个权限检查 mixin,检查模型是否已更改(即它被更改了)。并且在代码的所有其他部分中也要尊重冻结状态。
当然,我还没有想到其他各种用例,但这应该是一个有价值的起点。

我之前不知道有可冻结的mixin。我认为那是一个很好的起点。 - dagda1
唯一的问题是它无法在语言层面上强制执行。该应用程序应该尊重冻结状态。这就是为什么我建议我们使用isDirty标志的原因。 - Gaurav Shetty
如果您在服务器上使用过滤器来限制发送到客户端的内容,那么这不应该是一个问题。请查看active_model_serializers的“scope”。 - Panagiotis Panagi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接