我正在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函数以检索那种方式的信息,但也无法使其工作。