我想在我的應用程序中使用角度UI路由器的resolve
函數來實現一些安全性。我在這個問題的第二個答案中構建了基於解決方案#2的解決方案:Angular ui-router: how to prevent access to a stateAngular UI路由器和安全
它工作正常,除了我不想允許用戶導航到的路由控制器仍然實例化。我或多或少地遵循John Papa對Angular的建議,所以我在每個控制器中都有一個activate
函數。我可以在這裏仔細檢查身份驗證,但是這需要對我的每個控制器進行重複性的工作。此外,從原始答案中刪除在驗證功能中使用$timeout
似乎沒有不利影響。
這裏是我如何設置來處理這樣的路線:
$stateProvider.state('orderqueue', {
url: "/orderqueue",
templateUrl: "views/orderqueue.html",
controller: 'orderQueueController',
controllerAs: 'orders',
role: 'Order Admin',
resolve: {authenticate: authenticate}
});
和我的身份驗證功能如下:
function authenticate($q,$state,$timeout, UserService) {
(new UserService()).$getUser().then(
function(user) {
var role = ($state.current.role) ? $state.current.role :$state.current.name ;
// alert(role) ;
if (user.userName == 'wmfeltman') {
return $q.when()
} else
{
// $timeout(function() {
// This code runs after the authentication promise has been rejected.
// Go to the log-in page
$state.go('login')
// })
// Reject the authentication promise to prevent the state from loading
return $q.reject()
}
}
)
}
有沒有辦法得到解決之前,火控制器是實例化的?文件似乎表明,它是如何工作的,但事實並非如此。
我想這很簡單,但並不真正需要。我實際上正朝着我的所有路線,控制器,模板等的數據驅動解決方案發展,並且不太喜歡在我的視圖中嵌入控制器引用。 1.5中的新路由器功能是否相同?似乎在這個時候朝這個方向邁進是一個好的舉動,因爲這也有助於爲Angular 2.0遷移做準備。 –
儘管如此,您的建議確實按預期工作。 –
其實,我把我的評論回來了。在使用此方法調用解析之前,控制器仍會實例化。 –