根据条件授予用户访问URL的权限(Angularjs)

时间:2016-04-05 18:31:30

标签: javascript html angularjs url

这是继续下面的stakoverflow问题

Set different hyperlink for same <a> tag (Using AngularJs)

我有2个网址,如下所示。 Pre.html和Block.html

<ul class="dropdown-menu">
                <li><a ng-model="data" ng-href="{{ data ? 'Pre.html' : 'Block.html' }}" target="_blank">Pre or Bloc</a></li> 
</ul>

这基本上检查控制器中的数据值,如果$ scope.data为true,则加载Pre.html。如果$ scope.data为false,则加载Block.html。

所以,有了这个我能够实现以下

1)用户点击链接。如果控制器中“data”的值为false,则会向用户显示阻止页面

2)用户点击链接。如果控制器上的'data'值为true,则会向用户显示pre.html页面。

但是当用户在URL中键入链接时,即使$ scope.data设置为false,他仍然可以访问Pre.html。

当$ scope.data设置为false时,如何阻止此URL访问。 &GT;任何建议

1 个答案:

答案 0 :(得分:3)

这是无法实现的,因为当用户自己键入URL时;您的$ scope更改,不再可访问。

解决这个问题的一种方法是在$ window变量中设置值;这可以从您为Pre.html定义的控制器中进行ping操作。

例如:

var controllers = angular.module('controllers', []);
controllers.controller('PageCtrl', [ '$scope', '$window', $location, function($scope, $window, $location) {
    if (some condition) {
        $window.sessionStorage.data = true
    } else {
        $window.sessionStorage.data = false
    }
}

如果条件为false,只需将用户重定向回上一页或默认主页。

controllers.controller('PreCtrl', [ '$scope', '$window', $location, function($scope, $window, $location) {
    if ($window.sessionStorage.data) {
        // Do something?
    } else {
        $location.path('#/home');
    }
}