Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
it/permission-based-auth-system-in-angularjs/
19
{
name: "John Doe",
permissions: ['list_orders', 'read_statistics']
// ...
}
$routeProvider
requiresAuthentication permissions
permissions
1 angular
2 .module('app', [
3 'ngResource',
4 'ngRoute',
5 'AuthServices'
6 ])
7 .config(function ($routeProvider) {
8 $routeProvider
9 .when('/login', {
10 templateUrl: 'views/login.html',
1 of 8 12/25/2017, 7:54 PM
Developing a permission-based auth system in AngularJS http://www.stefanoscerra.it/permission-based-auth-system-in-angularjs/
11 controller: 'LoginCtrl'
12 })
13 .when('/home', {
14 templateUrl: 'views/home.html',
15 controller: 'HomeCtrl',
16 requiresAuthentication: true
17 })
18 .when('/sales/orders/new', {
19 templateUrl: 'views/sales/new_order.html',
20 controller: 'OrderDetailCtrl',
21 requiresAuthentication: true,
22 permissions: ["administration"]
23 })
24 .when('/sales/orders', {
25 templateUrl: 'views/sales/orders.html',
26 controller: 'OrdersCtrl',
27 requiresAuthentication: true,
28 permissions: ["administration", "list_orders"]
29 })
30 });
permission
2 of 8 12/25/2017, 7:54 PM
Developing a permission-based auth system in AngularJS http://www.stefanoscerra.it/permission-based-auth-system-in-angularjs/
Auth
3 of 8 12/25/2017, 7:54 PM
Developing a permission-based auth system in AngularJS http://www.stefanoscerra.it/permission-based-auth-system-in-angularjs/
60 if(!view.permissions || !view.permissions.length){
61 return true;
62 }
63
64 return auth.userHasPermission(view.permissions);
65 };
66
67
68 auth.userHasPermission = function(permissions){
69 if(!auth.isLoggedIn()){
70 return false;
71 }
72
73 var found = false;
74 angular.forEach(permissions, function(permission, index){
75 if ($sessionStorage.user.user_permissions.indexOf(permission) >= 0){
76 found = true;
77 return;
78 }
79 });
80
81 return found;
82 };
83
84
85 auth.currentUser = function(){
86 return $sessionStorage.user;
87 };
88
89
90 auth.isLoggedIn = function(){
91 return $sessionStorage.user != null;
92 };
93
94
95 return auth;
96 });
permission Auth
1 angular.module('app')
2 .directive('permission', ['Auth', function(Auth) {
3 return {
4 restrict: 'A',
5 scope: {
6 permission: '='
7 },
8
9 link: function (scope, elem, attrs) {
10 scope.$watch(Auth.isLoggedIn, function() {
11 if (Auth.userHasPermission(scope.permission)) {
12 elem.show();
13 } else {
14 elem.hide();
15 }
16 });
17 }
18 }
19 }]);
4 of 8 12/25/2017, 7:54 PM
Developing a permission-based auth system in AngularJS http://www.stefanoscerra.it/permission-based-auth-system-in-angularjs/
1 angular.module('app')
2 .controller('OrdersCtrl', function ($scope, Auth, Sales) {
3
4 if (Auth.userHasPermission(["administration"])){
5 // some evil logic here
6 var userName = Auth.currentUser().name;
7 // ...
8 }
9
10 });
Auth
user
run
1 angular.module('app', [
2 'ngResource',
3 'ngRoute',
4 'AuthServices'
5 ])
6 .run(['$rootScope', '$location', 'Auth', function ($rootScope, $location, Auth) {
7 Auth.init();
8
9 $rootScope.$on('$routeChangeStart', function (event, next) {
10 if (!Auth.checkPermissionForView(next)){
11 event.preventDefault();
12 $location.path("/login");
13 }
14 });
15 }]);
Auth.init
Auth
5 of 8 12/25/2017, 7:54 PM
Developing a permission-based auth system in AngularJS http://www.stefanoscerra.it/permission-based-auth-system-in-angularjs/
3 $scope.email = "";
4 $scope.password = "";
5 $scope.failed = false;
6
7 $scope.login = function() {
8 Auth.login($scope.email, $scope.password)
9 .then(function() {
10 $location.path("/home");
11 }, function() {
12 $scope.failed = true;
13 });
14 };
15
16 });
1 angular.module('app')
2 .controller('MainCtrl', function ($scope, $rootScope, $location, Auth) {
3
4 $rootScope.logout = function(){
5 Auth.logout();
6 $location.path("/login");
7 };
8
9 });
6 of 8 12/25/2017, 7:54 PM
Developing a permission-based auth system in AngularJS http://www.stefanoscerra.it/permission-based-auth-system-in-angularjs/
LOG IN WITH
OR SIGN UP WITH DISQUS ?
{
name: "John Doe",
permissions: ['list_orders', 'read_statistics']
// ...
}
7 of 8 12/25/2017, 7:54 PM
Developing a permission-based auth system in AngularJS http://www.stefanoscerra.it/permission-based-auth-system-in-angularjs/
8 of 8 12/25/2017, 7:54 PM