2016-06-09 39 views
0

我有以下情況。實際的頁面加載開始,用戶登錄被檢查認證。如果授予訪問權限,實際頁面加載完成並且用戶可以訪問該頁面。如果訪問被拒絕,實際頁面加載停止並且用戶被重定向到「訪問被拒絕」頁面。承諾先執行一個特定的代碼

事實上,情況應該是這樣的。用戶認證被檢查。如果授予訪問權限,實際頁面加載開始並且用戶可以訪問頁面。如果訪問被拒絕,用戶將直接進入「訪問被拒絕」頁面。

有人能告訴我如何包含承諾這種情況。目前的代碼如下。

$q.when().then(function() { 
    return $rootScope.$emit('resetView', false, 'default'); 
}).then(function (result) { 

    loadNavBar();  //actual page loading starts here 
}, function (error) { 
    $log.error("Caught an error:", error); 
    return $q.reject('New error'); 
}); 

下面的函數是loadNavBar()它被執行。用戶認證是在這個內部完成的。因此頁面加載開始,然後用戶被檢查。我希望用戶先檢查自己,然後根據他的訪問權限相應地加載頁面。

var loadNavBar = function() { 


    //few functions here to display page. 
    //below code to check user authentication 

    var serviceURL_CheckUserExists = '/api/Pre/CheckUserExists'; 

    //ajax to check if user exists in database. give/ deny access based on user present in DB and if user is set as blockuser in db. 
    $.ajax({ 
     type: "GET", 
     url: serviceURL_CheckUserExists, 
    }).then(function (response) { 
     if (response.Results.length == 1 && response.Results[0].BlockUser == false) { //user has access if condition is satisfied. 
      $rootScope.myLayout.eventHub.emit('getUserName', response.Results[0].User_ID.trim()); 

      $scope.role = ""; 
      var details = response.Results[0]; 
      for (var parameters in details) { 
       if (details[parameters] == true) { 
        $scope.role += parameters + ','; 
       } 
      } 

      $scope.role = $scope.role.replace(/.$/, "."); 

      var firstname = response.Results[0].FirstName; 
      firstname = firstname.replace(/\s/g, ''); 
      $scope.$apply(function() { 
       $scope.username = response.Results[0].FirstName + " " + response.Results[0].LastName; 

      }); 
     } 
     else { $window.location.href = '../../../BlockUser.html'; } //block access to actual page and redirect to 'access denied' page. 
      } 
     } 
    }); 


}; 
+0

記錄什麼不起作用?你的意思是你想從'loadNavBar'返回一個承諾嗎? – Bergi

+0

頁面加載首先開始,如果用戶被拒絕訪問,我會看到頁面的一部分。我不希望用戶在未訪問時看到頁面的任何部分。他應該直接訪問被拒絕的頁面。 – Patrick

+0

爲什麼頁面的默認視圖已經包含用戶可能被拒絕訪問的內容?該內容甚至不應該到達客戶端。 – Bergi

回答

1

我覺得你的問題的正確方法是使用resolve屬性的路線,所以如果他沒有登錄用戶無法瀏覽某些網頁,一旦他在你登錄可以注入的用戶對象控制器

例如導航到主頁,你必須在

.when("/home", { 
templateUrl: "homeView.html", 
controller: "homeController", 
resolve: { 
    user: function(AuthenticationService){ 
     return AuthenticationService.getUser(); 
    } 
    } 
}) 

app.controller("homeController", function ($scope, user) { 
    $scope.user = user; 
}); 

https://www.sitepoint.com/implementing-authentication-angular-applications/

0

下面是隱藏內容的快速示例,直到用戶通過身份驗證才能看到它。如果用戶通過ajax調用進行身份驗證,請單擊「身份驗證」按鈕以觸發您將運行的功能。

function userIsAuthenticated(){ 
    document.getElementById('pageContent').style.display = 'block'; 
} 

一個簡單的實現見JsFiddle:顯示內容可以像機能的研究來完成。