AngularJS - 访问我的.run()函数中的状态信息以进行授权

时间:2016-11-06 14:58:23

标签: angularjs angular-ui-router

我正在Angular和Rails中构建一个基本的CRUD应用程序,并且无法限制登录用户访问其他用户信息的“编辑”状态。我正在使用Devise和angular-devise,它提供包括Auth.isAuthenticated()Auth._currentUser的Auth服务。以下是我的app.js文件的一部分,用于展示我的工作内容:

// the rest of my .config file consisting of lots of states...

.state('home.editThing', {
  url:'things/:id/edit',
  controller: 'ThingController as ctrl',
  authenticate: true,
  authorize: true,
  templateUrl: 'app/views/thing.html',
  resolve: {
    thing: ["$stateParams", "DataService", function ($stateParams, DataService) {
      return DataService.getThing($stateParams.id);
    }]
  }
})

$urlRouterProvider.otherwise('welcome');
}])

.run(['$rootScope', '$state', 'Auth', function($rootScope, $state, Auth){
  $rootScope.$on("$stateChangeStart", function(event, toState, toParams, fromState, fromParams, options){
  if ( toState.authenticate && !Auth.isAuthenticated()){
    alert('Log in to create and edit things');
    event.preventDefault();
  }
 });
}]);

这可以正确地限制未登录的用户访问编辑状态。我还想允许用户只编辑他们自己的东西,并尝试向我的.run函数添加授权并编辑状态失败。在上面的代码中,我已经向状态对象添加了一个授权属性。我想为我的.run函数添加第二个条件,例如:

if (toState.authorize && thing.user.id != Auth._currentUser.id) { alert('You don't have permission to edit this thing')};

但是我的.run函数无法访问thing.user.id。我无法访问toState的resolve对象中的数据。我还尝试将我的DataService注入.run函数以检索那种方式的信息,但也无法使其工作。

0 个答案:

没有答案