Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS添加安全和本地存储监视_Javascript_Angularjs_Angular Ui Router_Local Storage_Yeoman - Fatal编程技术网

Javascript AngularJS添加安全和本地存储监视

Javascript AngularJS添加安全和本地存储监视,javascript,angularjs,angular-ui-router,local-storage,yeoman,Javascript,Angularjs,Angular Ui Router,Local Storage,Yeoman,我有一个angularJS应用程序,它使用AngularUI路由器进行路由 我添加了以下安全级别,但这对我没有帮助: 我正在本地存储中存储令牌和用户角色。 根据用户角色,我将用户重定向到路由 我已在本地存储上应用了watch服务,但在刷新时 未获取本地存储的最后(旧)值,因此在本例中,我的检查(监视)失败 当有人在本地存储和刷新站点上更改令牌时。 然后我无法检查令牌是否已更改 在这种情况下,用户可以查看模板,但无法获取数据,因为我在后端添加了安全层。但我也需要阻止对模板的访问 请帮助我在angu

我有一个angularJS应用程序,它使用AngularUI路由器进行路由

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

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

  • 我已在本地存储上应用了watch服务,但在刷新时 未获取本地存储的最后(旧)值,因此在本例中,我的检查(监视)失败

  • 当有人在本地存储和刷新站点上更改令牌时。 然后我无法检查令牌是否已更改

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


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

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

    //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
               }
            });     
    });    
    

    拨弄:

    我也在做同样的事情。但在登录后,我将令牌(salt)与用户角色(如Admin/user)一起存储在localstorage,并根据用户角色允许登录用户查看页面(在$stateChangeStart上)。但如果有人对localstorage进行了更改(将用户更改为Admin)并刷新页面,那么他将能够看到管理员模板。在这种情况下,localstorage watch服务无法通过“进行更改”来工作,您的意思是使用类似调试器的工具吗?根据定义,客户端是不安全的,并且无法对此进行保护。我相信只有在用户拥有正确权限的情况下,服务器上才会有返回页面的内容。在上面的示例中,您将使用templateUrl而不是template,并在它前面进行一些权限检查。基本上,我将令牌和角色存储在localstorage中,并且我已在其上应用了watcher服务。根据本地存储中的角色,im应用检查。如果有人在本地存储中进行更改并使用它(无需刷新),则watcher服务可以工作。如果有人在更改localstorage值后刷新页面,则angular会将以前的localstorage值显示为此watcher服务中未定义的值不起作用。。我需要克服这个问题。