保护角度属性

时间:2016-04-11 12:01:13

标签: javascript angularjs

我是新手,我只是想问,有什么办法可以保护你的角度变量/属性吗?

就像我有一个单页应用程序,其中包含来自客户端和服务器端的身份验证。 对于简单示例,我有2个用户类型:简单用户和管理员。

这是一个基本的 ng-view

<div class="container">
  <div class="admin-view" ng-show="isAdmin">
  .
  .
  </div>
  <div class="user-view" ng-show="!isAdmin">
  .
  .
  </div>
</div>

app.js

app.run(function($rootScope,$route, $http){
  var user = {};
  $rootScope.isAdmin = false;
  $rootScope.getUser = function(){
    $http({
      methop: 'GET',
      url: getMyUserPlease(...)
    }).then(function successCallback(response){
      user = response;
      if (user.role === 'admin'){
        $rootScope.isAdmin = true;
      } else {
        $rootScope.isAdmin = false;
      }
    })
  }
})

它工作正常,但是如果我在浏览器控制台中检查它,我可以将isAdmin属性设置为true,我可以看到我无法访问的所有内容看到。 只需在浏览器控制台中输入以下内容:

$rootScope = angular.element(document).scope();
$rootScope.isAdmin = true;
$rootScope.$apply();

是否有任何良好做法,以保护&#34;内容&#34;?

谢谢

1 个答案:

答案 0 :(得分:2)

TLDR你真的不能。

简单的答案是不要信任角度,用户不应该看到信息,使用后端授权。由于角度是在浏览器中运行的,因此浏览器的所有者可以执行他们想要的操作,包括更改数据。

最好的解决方案是创建一个通过端点回调应用程序并控制端点上的auth的指令。

我还会考虑使用ngIf来避免显示Dom,如果他们没有被授权。区别在于ng-show hide use display:none,而ng-if阻止了Dom渲染。

P.S。人们给你的黑客可能会通过混淆工作,但永远不会万无一失