避免在AngularJS中直接访问URL
Avoid direct URL access in AngularJS
我有一个使用ui-router路由的web应用程序。有一个用户管理模块,其中有特定的角色给用户(角色x, y和z)。当角色x的用户登录时,他将被限制在ui-router的某些状态,例如:"仪表板"。
当用户登录时,我已经将用户的角色保存在cookie变量中(使用$cookie
)。当角色x的用户像这样登录时,我还使用ng-hide
隐藏仪表板导航侧边栏:
<li ui-sref-active="active">
<a ui-sref="dashboard" ng-hide="roleIsX()">
<i class="fa fa-laptop"></i> <span class="nav-label">Dashboard</span>
</a>
</li>
控制器:
$scope.roleIsX = function() {
if ($cookies.get('loggedInUserRole') === "x")
return true;
else
return false;
}
这工作正常,但问题是,当任何用户登录时,他能够直接导航到一个URL写在地址栏。考虑到我的情况,有没有简单的方法可以解决这个问题?
我最终按照@Shivi的建议使用了resolve
的ui-router
。如果有人还在查找,下面是代码:
app.config(['$urlRouterProvider', '$stateProvider', '$locationProvider',
function($urlRouterProvider, $stateProvider, $locationProvider){
...
.state('user-management', {
...
...
resolve: {
roleAuthenticate: function($q, UserService, $state, $timeout) {
if (UserService.roleIsX()) {
// Resolve the promise successfully
return $q.when()
} else {
$timeout(function() {
// This code runs after the authentication promise has been rejected.
// Go to the dashboard page
$state.go('dashboard')
})
// Reject the authentication promise to prevent the state from loading
return $q.reject()
}
}
}
})
此代码检查roleIsX
是否继续状态,否则打开dashboard
状态。
有用的参考:angular ui-router登录认证-答案由@MK Safi
监听$locationChangeStart
事件,并在需要时阻止它:
$scope.$on("$locationChangeStart", function(event, next, current) {
if (!$scope.roleIsX()) {
event.preventDefault();
}
});
相关文章:
- 角度生成器yoman,直接访问url
- 访问url[材质Ui+选项卡]时,Angular Ui路由器未加载视图
- 代码点火器在访问 URL 时提交表单
- 角度路由;在浏览器中直接访问URL时不起作用,但在单击时起作用
- 根据条件(Angularjs)允许用户访问URL
- 在XSL中访问URL参数
- $.ajax赢得't访问url
- 如何在angular中访问URL中的查询参数(在hash之外,非html 5模式)
- 基于 id 访问 url 时存在角度路由问题
- AngularJS html5mode = 当我使用参数直接访问 url 时出现真正的错误
- 在噩梦中循环访问 url 时的异步挑战.js
- CasperJS和'不安全的JavaScript尝试访问URL为'的帧;错误
- "不安全的JavaScript尝试访问URL为..的帧"使用本地文件
- 访问 URL 参数 - PHP 和 Angular JS
- Javascript,在不知道我处于什么页面级别的情况下访问url
- 访问URL时删除MongoDB条目-node.js
- 访问URL时,是否可以完全清除主干上的哈希
- 访问URL中的更改
- 根据客户端访问URL的次数,从服务器提供不同的JS文件
- 如何通过ASP.NET WebForm上的jQuery$.get()方法访问URL