这更像是对模式和讨论的要求,而不是简单的一次性问题。我有一个骨干应用程序,用户可以成为不同角色的一部分。路线定义如下:
routes:
"": "showHomePage"
"import": "showImportPage"
我希望import
页面只能访问某些用户角色。我想我可以这样做:
showImportPage: ->
if not MyApp.CurrentUser.can_import
return
确实有效。当然,正如您可以想象的那样,只需使用Chrome控制台即可轻松利用它,即使我没有在任何地方显示链接,只需进入地址栏并输入即可。
即使以上内容足以阻止普通用户,我的问题是:如何保护该路由不被访问?
我到目前为止的观点是,唯一的方法是在服务该路由之前返回服务器,通过检查特殊URL或在访问之前简单地重新获取用户模型...我有这个故障但是,如果每个url必须由服务器进行身份验证,并且我需要在允许用户导航之前显示通常的ajax微调器,这基本上会破坏“单页面应用程序”背后的整个想法的目的。我知道返回和转发的数据量是最小的(只有json用户信息甚至更少),但仍然......
如果你不得不面对这个问题,你有什么看法或解决方案?
答案 0 :(得分:2)
我认为你的问题很棒。
我使用BackboneJS和Jquery mobile制作了一个PhoneGap应用,所以我遇到了你现在面临的同样问题。
我认为授权不能仅仅在客户端生存,因为它本身就是错误的。生活在客户端的东西完全由客户控制,这是任何人都无法改变的。
只要请求获得所需的最小数据且所有逻辑/视图组件都位于客户端上,向服务器发送请求不会破坏单应用程序页面范例。
请记住,如果您不希望常规用户看到该页面中的敏感数据,则必须在验证请求授权后从服务器发送该数据,因此它不仅仅是JSON的必须发送的用户信息,也是数据本身。
我希望其他人在这里证明我的错,但就我而言,这就是合约。