6

我正在研究使用以下堆栈创建单页应用程序(在此处接受建议)

  • jQuery
  • ASP.Net MVC 4
  • 实体框架 5

我对这个堆栈和角度非常满意,但有几件事我不确定。不同的用户有不同的角色,我们需要能够根据角色隐藏/显示某些页面和/或页面上的控件。我熟悉一些更传统的 Web 应用程序的解决方案,但我不确定当涉及到单页应用程序时我会从哪里开始。

我希望不使用 MVC 部分视图,而只是像 WebApi 一样发送和处理服务器代码。但是 Angular 必须处理所有模板,这意味着有人可以访问前端的模板,并且可能能够找出调用他们不应该调用的函数?还是我应该检查 WebAPI 方法中的角色并确保它们具有正确的角色?

下一个问题是本地化。我们将需要支持多种语言。我希望我们可以有不同的语言文件,en_gb.XML,其中包含密钥及其各种翻译。然后,如果用户更改了语言,我也许只能使用值来更改角度的某些内容

angular.value("language", 'en_gb.js');

或者

angular.value("language", 'en_gb.xml');

有没有其他人解决过这类问题。

4

2 回答 2

5

安全性:您应该让 AngularJS 控制视图中的所有内容,例如模板、部分视图等,因为 AngularJS 是一个功能齐全的前端框架。因为它只是前端框架,它不负责服务器数据,所以只是做一些 RESTful 调用来获取/保存/更新/删除数据。而且它也不负责安全性,所以你所说的“WebApi”必须在服务器端 100% 安全。因此,即使有人能够找出不允许他进行的调用,该调用也不会成功,因为它的凭据将在服务器端进行检查。仍然存在可能的恶意攻击,AngularJS 对此有答案。请参阅http://docs.angularjs.org/api/ng .$http的“安全考虑”部分。

本地化:AngularJS 支持货币、日期和数字的本地化。但是对于 UI 中的字符串,语言中还没有内置任何内容。你必须建立自己的答案。有一些尝试使用 AngularJS 实现翻译,比如这里:https ://github.com/firehist/grunt-angular-translate

于 2013-08-22T10:00:23.150 回答
4

我可以帮你解决这里的安全问题。您需要根据用户角色实现自定义一些自定义逻辑来隐藏\显示元素。只要您可以将用户角色信息传递给客户端,您就可以实现这样的显示\隐藏逻辑。请记住,此显示\隐藏逻辑应由服务器驱动,否则任何人都可以更改客户端数据并访问功能。

实现此目的的一种方法是将服务器端模板(部分视图)返回给客户端进行渲染(两者都ng-include支持ng-view加载服务器模板)。服务器可以验证用户是否有权访问并在失败时返回空响应。所以不存在信息泄露的可能。

可以为所有 webapi 调用添加类似的检查,并将未授权状态代码返回给最终用户。

于 2013-08-22T10:07:31.550 回答