1
我的理解基於角色的訪問控制是我需要採取以下步驟:如何實現與AngularFire
- 爲只讀上訪問數據
- 使用安全規則的用戶角色角色控制訪問
- 檢查路由器的作用
有官方文件如何處理安全規則不同的例子,但我無法弄清楚浩w檢查路由器中的角色。假設我有一個僅限管理員的區域,如果某個不是管理員的人嘗試訪問該頁面,我希望該用戶被重定向。
我目前繼official example using UI-Router,所以這是我的代碼:
app.config(["$stateProvider", function ($stateProvider) {
$stateProvider
.state("home", {
// the rest is the same for ui-router and ngRoute...
controller: "HomeCtrl",
templateUrl: "views/home.html",
resolve: {
// controller will not be loaded until $waitForSignIn resolves
// Auth refers to our $firebaseAuth wrapper in the factory below
"currentAuth": ["Auth", function(Auth) {
// $waitForSignIn returns a promise so the resolve waits for it to complete
return Auth.$waitForSignIn();
}]
}
})
.state("account", {
// the rest is the same for ui-router and ngRoute...
controller: "AccountCtrl",
templateUrl: "views/account.html",
resolve: {
// controller will not be loaded until $requireSignIn resolves
// Auth refers to our $firebaseAuth wrapper in the factory below
"currentAuth": ["Auth", function(Auth) {
// $requireSignIn returns a promise so the resolve waits for it to complete
// If the promise is rejected, it will throw a $stateChangeError (see above)
return Auth.$requireSignIn();
}]
}
});
}]);
我猜我會在決心以檢查用戶的角色,但我會如何訪問數據從那裏的數據庫?
更新:
我想安德烈的解決方案,但 「waitForAuth」(執行console.log( 「測試1」)從來沒有觸發 「waitForSignIn」 的確,雖然,但再沒有任何反應 - 沒有錯誤消息。
.state('superadmin-login', {
url: '/superadmin',
templateUrl: 'views/superadmin-login.html',
'waitForAuth': ['Auth', function (Auth) {
console.log('test1');
// $requireAuth returns a promise so the resolve waits for it to complete
// If the promise is rejected, it will throw a $stateChangeError (see above)
return Auth.refAuth().$waitForSignIn();
}],
})
.state('superadmin', {
url: '/center-of-the-universe',
templateUrl: 'views/superadmin.html',
resolve: {
// YOUR RESOLVES GO HERE
// controller will not be loaded until $requireAuth resolves
// Auth refers to our $firebaseAuth wrapper in the example above
'currentAuth': ['Auth', function (Auth) {
console.log('test2');
// $requireAuth returns a promise so the resolve waits for it to complete
// If the promise is rejected, it will throw a $stateChangeError (see above)
return Auth.refAuth().$requireSignIn();
}],
//Here i check if a user has admin rights, note that i pass currentAuth and waitForAuth to this function to make sure those are resolves before this function
hasAdminAccess: function (currentAuth, waitForAuth, Rights) {
console.log('test');
return Rights.hasAdminAccess(currentAuth);
}
}
})
大答案安德烈。你可以添加一個你用於權限的JSON結構的片段嗎?還有可能還有安全規則(因爲這是確保你的規則得到執行的唯一方法)? –
非常感謝您的幫助André,我非常感謝。請參閱上面的更新 - 我不確定是否因爲我不使用抽象狀態而錯誤地實現了您的解決方案? – user3255061
@ user3255061它與抽象狀態沒有任何關係,但事實上你有不同的狀態waitForAuth。您也可以將其置於其他狀態或從hasAdminAccess功能中刪除它。那麼它應該工作。 –