3

这更像是对模式和讨论的要求,而不是一个简单的一次性问题。我有一个骨干应用程序,用户可以在其中担任不同角色。路线像往常一样定义:

routes:
  "": "showHomePage"
  "import": "showImportPage"

我希望该import页面只能由某些用户角色访问。我想我可以做这样的事情:

showImportPage: ->
  if not MyApp.CurrentUser.can_import
    return

这确实有效。当然,正如您可以想象的那样,这很容易通过使用 Chrome 控制台来利用,即使我没有在任何地方显示链接,也很容易进入地址栏并输入它。

尽管上述内容足以阻止普通用户,但我的问题是:如何确保该路由不被访问?

到目前为止我的观点是,唯一的方法是在提供该路由之前引用服务器,或者通过检查特殊的 URL,或者在访问之前简单地重新获取用户模型......不过,我有这个问题,这基本上会破坏“单页应用程序”背后的整个想法的目的,如果每个 url 都必须由服务器进行身份验证,并且我需要在允许用户导航之前显示通常的 ajax 微调器......我知道来回的数据量很少(只有json用户信息甚至更少),但仍然......

如果您不得不面对这个问题,您有什么意见或解决方案?

4

1 回答 1

2

我认为你的问题很好。

我使用 BackboneJS 和 Jquery mobile 制作了一个 PhoneGap 应用程序,所以我遇到了你现在面临的同样问题。

我认为授权不能单独存在于客户端,因为它本质上是错误的。生活在客户身上的东西,完全由客户控制,这是任何人都无法改变的。

只要请求获得所需的最少数据并且所有逻辑/视图组件都位于客户端上,向服务器发送请求不会破坏单应用程序页面范例。

请记住,如果您在该页面中有不希望普通用户看到的敏感数据,也必须在验证请求的授权后从服务器发送,因此它不仅仅是用户信息的 JSON必须发送的,它也是数据本身。

我希望其他人会在这里证明我错了,但就我而言,这就是交易。

于 2012-11-13T16:55:04.473 回答