我有以下情況。實際的頁面加載開始,用戶登錄被檢查認證。如果授予訪問權限,實際頁面加載完成並且用戶可以訪問該頁面。如果訪問被拒絕,實際頁面加載停止並且用戶被重定向到「訪問被拒絕」頁面。承諾先執行一個特定的代碼
事實上,情況應該是這樣的。用戶認證被檢查。如果授予訪問權限,實際頁面加載開始並且用戶可以訪問頁面。如果訪問被拒絕,用戶將直接進入「訪問被拒絕」頁面。
有人能告訴我如何包含承諾這種情況。目前的代碼如下。
$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.
}
}
});
};
記錄什麼不起作用?你的意思是你想從'loadNavBar'返回一個承諾嗎? – Bergi
頁面加載首先開始,如果用戶被拒絕訪問,我會看到頁面的一部分。我不希望用戶在未訪問時看到頁面的任何部分。他應該直接訪問被拒絕的頁面。 – Patrick
爲什麼頁面的默認視圖已經包含用戶可能被拒絕訪問的內容?該內容甚至不應該到達客戶端。 – Bergi