您好我的安全性在我的app角度,是用户未登录无法访问任何管理路由,在这种情况下我有这个代码:
app.run(function($rootScope, $location, loginService){
var routespermission=['/admin','/products','/products/','/products/:id/edit','/productos/:id/delete']; //route that require login
$rootScope.$on('$routeChangeStart', function(){
if( routespermission.indexOf($location.path()) !=-1)
{
var connected=loginService.islogged();
connected.then(function(msg){
if(!msg.data) $location.path('/login');
});
}
});
});
第一条路线工作正常,但使用格式为#34;产品/ 1 /编辑"显示给用户未记录,似乎这部分缺少某些东西,以致用户无法编辑和删除记录
答案 0 :(得分:0)
我不是安全专家,但我在我的应用程序中执行以下操作。我为路由本身分配了一个权限,在运行中我使用的服务包含我当前用户的权限,并检查用户是否包含所需的权限。
$rootScope.$on('$routeChangeStart', function (event, next, current) {
if (next.permission !== undefined && next.permission !== null) {
if (!permissionStore.hasPermission(next.permission)) {
$location.path('/');
}
}
});
在路线上:
$routeProvider
.when('/SomeRoute',
{
templateUrl: 'something.html',
controller: 'SomeController',
controllerAs: 'vm',
permission: 'Some Permission'
});
因此,如果用户没有“一些权限”,它将重定向它们。希望这会有所帮助。
答案 1 :(得分:0)
你可以使用ui-router做类似的事情。下面我将状态定义为示例和函数,以根据条件阻止路由。我在我的应用程序中执行以下操作。
.state('products', {
url: '/products',
views: {
'pageContent@': {
templateUrl: 'app/views/products/product.html',
controller: 'productController',
controllerAs: 'vm'
}
}
})
.state('products_os', {
url: '/products',
views: {
'pageContent@': {
templateUrl: 'app/views/products/product_os.html',
controller: 'productOsController',
controllerAs: 'vm'
}
}
})
$rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams) {
var restrictedRoute: ['admin', 'products','product_os'];
angular.forEach($http.pendingRequests, function(request) {
request.canceler.resolve();
});
if (toState.name === "login" && authenticationService.IsAuthenticated() === true) {
return $state.go('products');
} else {
authenticationService.clearCredentials();
$state.go('login');
}
if ($.inArray(fromState.name, restrictedRoutes) === -1) return;
});
希望这会对你有所帮助。感谢