首頁 > web前端 > js教程 > 主體

AngularJS驗證的方法_AngularJS

WBOY
發布: 2016-05-16 15:15:21
原創
1082 人瀏覽過

權限的設計中比較常見的就是RBAC基於角色的存取控制,基本思想是,對系統操作的各種權限不是直接授予具體的用戶,而是在用戶集合與權限集合之間建立一個角色集合。每一種角色對應一組對應的權限。

一旦使用者被指派了適當的角色後,該使用者就擁有此角色的所有操作權限。這樣做的好處是,不必在每次創建用戶時都進行分配權限的操作,只要分配用戶相應的角色即可,而且角色的權限變更比用戶的權限變更要少得多,這樣將簡化用戶的權限管理,減少系統的開銷。

在Angular構建的單頁應用中,要實現這樣的架構我們需要額外多做一些事.從整體項目上來講,大約有3處地方,前端工程師需要進行處理.

1. UI處理(根據使用者擁有的權限,判斷頁面上的一些內容是否顯示)

2. 路由處理(當使用者存取一個它沒有權限存取的url時,跳到一個錯誤提示的頁面)

3. HTTP請求處理(當我們發送一個資料請求,如果回傳的status是401或403,則通常重定向到一個錯誤提示的頁面)

如果要在客戶端使用AngularJS做身份驗證的話,推薦使用service來做,因為service是單例的,可以很方便的在所有view,controller,directives,filters和其他service中共享數據,而不用採取暴露全域變數的方式,封裝性也有一定的保障。

一個簡單的例子:

services.factory('UserService', [function() { 
var sdo = { 
isLogged: false, 
username: '' 
}; 
return sdo; 
}]);
登入後複製

AngularJS中使用service都是透過依賴聲明的方式來做的,例如:

var controllers = angular.module('myApp.controllers', []);
/* ... */
controllers.controller('loginController', ['$scope', '$http', 'UserService', function(scope, $http, User) {
}]);
登入後複製

在這個loginController裡我們可以定義一個login function來向伺服器驗證使用者身分:

scope.login = function() { 
var config = { /* ... */ } // configuration object
$http(config) 
.success(function(data, status, headers, config) { 
if (data.status) { 
// succefull login 
User.isLogged = true; 
User.username = data.username; 
} 
else { 
User.isLogged = false; 
User.username = ''; 
} 
}) 
.error(function(data, status, headers, config) { 
User.isLogged = false; 
User.username = ''; 
}); 
}
登入後複製

接著,只要聲明依賴了UserService的任何controller,view,filter等都可以透過UserService.isLogged來判斷使用者是否是已經驗證過的,或者匿名使用者

由於AngularJS通常會使用template把頁面分割重組,此時使用routeProvider來控制各個頁面的存取規則:

app.config(['$routeProvider', function($routeProvider) { 
$routeProvider.when('/login', { templateUrl: 'partials/login.html', controller: 'loginCtrl' , access: {isFree: true}}); 
$routeProvider.when('/main', { templateUrl: 'partials/main.html', controller: 'mainCtrl' }); 
$routeProvider.otherwise({ redirectTo: '/main' }); 
}]);
登入後複製

有的頁面是無需驗證就可以存取的,例如login.html,有的頁面是需要登入使用者才能夠看到的,例如main.html,此時我們就需要透過增加通用的checkUser邏輯來判斷目前使用者是否能看到這些頁面:

directives.directive('checkUser', ['$rootScope', '$location', 'userSrv', function ($root, $location, userSrv) { 
return { 
link: function (scope, elem, attrs, ctrl) { 
$root.$on('$routeChangeStart', function(event, currRoute, prevRoute){ 
if (!prevRoute.access.isFree && !userSrv.isLogged) { 
// reload the login route 
} 
/* 
* IMPORTANT: 
* It's not difficult to fool the previous control, 
* so it's really IMPORTANT to repeat the control also in the backend, 
* before sending back from the server reserved information. 
*/ 
}); 
} 
} 
}]);
登入後複製

這個directive註冊在了rootScope上,並且監聽了routeChangeStart,也是一種AOP的概念,在route change發生之前,織入了一個切面,來判斷用戶身份權限。由此,來達到在AngularJS中驗證身分的整個邏輯。

以上所述是小編給大家介紹的AngularJS身份驗證的方法,希望對大家有幫助。

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!