【问题标题】:AngularJS Add security and Local-storage WatchAngularJS 添加安全性和本地存储监视
【发布时间】:2017-06-24 19:12:38
【问题描述】:

我有一个 angularJS 应用程序,它使用 angular ui-router 进行路由。

我添加了以下安全级别,但这并没有帮助我:

  1. 我将令牌和用户角色存储在本地存储中。 根据用户角色,我将用户重定向到路由。

  2. 我已在本地存储上应用监视服务,但在刷新时我 没有获得本地存储的最后(旧)值,因此在这种情况下,我的检查(监视)失败。

  3. 当有人在本地存储和刷新站点更改令牌时。 那么我无法检查令牌是否已更改。

  4. 在这种情况下,用户可以查看模板但无法获取数据,因为我在后端添加了安全层。但我也需要阻止访问模板。

请帮助我在 Angular(客户端)添加安全性以克服这些问题。

【问题讨论】:

    标签: javascript angularjs angular-ui-router local-storage yeoman


    【解决方案1】:

    如果我理解正确,您正在寻找一种方法来防止用户在没有所需权限的情况下看到模板。我所做的是,在更改页面时,首先检查用户是否具有正确的权限。在每个状态下,我都会添加访问页面所需的权限。

    //these are the permissions the user currently has
    var currentPermissions = {
      "User.Read":true,
      "User.Create":false
    }
    
    
    var app = angular.module('myApp', ['ui.router']);
    
    app.config( function($stateProvider) {
    
      $stateProvider.state('page1', {
            url: "/page1",
            data: {permission: "User.Read"}, //the perm required
            template: "Page 1"
        })    
        .state('page2', {
            url: "/page2",
            data: {permission: "User.Read"},
            template: "Page 2"
        })
        .state('page3', {
            url: "/page3",
            data: {permission: "User.Create"},
            template: "Page 3"
        })
        .state("noAccess", {
            url:"/noAccess",  
    
          template: "access denied"
        }); 
    });
    
    
    app.run(function($rootScope, $state) {
            $rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams){ 
    
               //check to make sure user has correct perm
               if(toState.data && !currentPermissions[toState.data.permission]){
                     event.preventDefault();
                     $state.go('noAccess');//redirect if user does not have perm
               }
            });     
    });    
    

    拨弄:https://jsfiddle.net/Darin_Cardin/mwg33rm4/

    【讨论】:

    • 我也在做同样的事情。但是登录后我将令牌(盐)与用户角色一起存储在本地存储中,例如。管理员/用户并根据用户角色,我允许登录用户查看页面(在 $stateChangeStart 上)。但是如果有人对 localstorage 进行更改(将用户更改为管理员)并刷新页面,那么他将能够在这种情况下看到管理模板 localstorage watch 服务不起作用
    • “做出改变”是指使用调试器之类的东西吗?客户端根据定义是不安全的,并且无法防止这种情况发生。我相信只有在用户具有正确权限的情况下,您才必须在服务器上拥有一些返回页面的东西。在上面的示例中,您将使用 templateUrl 代替模板,并在其前面进行一些权限检查。
    • 基本上我将令牌和角色存储在本地存储中,并且我已经在其上应用了观察者服务。取决于本地存储中的角色即时应用检查。如果有人在本地存储中进行更改并使用它(不刷新),观察者服务将起作用。如果有人在更改 localstorage 值后刷新页面,则 Angular 将以前的 localstorage 值显示为在此观察程序服务中未定义。我需要克服这个问题。
    猜你喜欢
    • 2014-06-03
    • 2020-01-10
    • 2015-11-23
    • 2011-04-12
    • 2023-03-29
    • 2015-09-01
    • 2017-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多