SHARE
TWEET

Untitled

a guest Dec 16th, 2014 165 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 'use strict';
  2.  
  3. angular.module('xenon.providers', []).
  4.  
  5.     provider('Authentication', function () {
  6.  
  7.         var currentUser = {};
  8.    
  9.         currentUser.isLoggedIn = function() {
  10.             return !!currentUser.name;
  11.         }
  12.        
  13.         currentUser.logout = function() {
  14.             $http.post('/logout');
  15.             _.each(currentUser, function(property) {
  16.                 this[property] = undefined;
  17.             });
  18.         }
  19.        
  20.         var config = {
  21.  
  22.             roles : [
  23.                 'public',
  24.                 'user',
  25.                 'admin'
  26.             ],
  27.  
  28.             //  user     : allowed access
  29.             accessLevels : {
  30.                 'public' : "*",
  31.                 'anon'   : ['public'],
  32.                 'user'   : ['user', 'admin'],
  33.                 'admin'  : ['admin']
  34.             }
  35.  
  36.         }
  37.  
  38.  
  39.         /*
  40.             Method to build a distinct bit mask for each role
  41.             It starts off with "1" and shifts the bit to the left for each element in the roles array parameter
  42.          */
  43.  
  44.         function buildRoles(roles) {
  45.  
  46.             var bitMask = "01";
  47.             var userRoles = {};
  48.  
  49.             for(var role in roles){
  50.                 var intCode = parseInt(bitMask, 2);
  51.                 userRoles[roles[role]] = {
  52.                     bitMask: intCode,
  53.                     title: roles[role]
  54.                 };
  55.                 bitMask = (intCode << 1 ).toString(2)
  56.             }
  57.  
  58.             return userRoles;
  59.         }
  60.  
  61.         /*
  62.         This method builds access level bit masks based on the accessLevelDeclaration parameter which must contain an array for each access level containing the allowed user roles.
  63.          */
  64.         function buildAccessLevels(accessLevelDeclarations, userRoles) {
  65.  
  66.             var accessLevels = {};
  67.             for(var level in accessLevelDeclarations){
  68.  
  69.                 if(typeof accessLevelDeclarations[level] == 'string'){
  70.                     if(accessLevelDeclarations[level] == '*'){
  71.  
  72.                         var resultBitMask = '';
  73.  
  74.                         for( var role in userRoles){
  75.                             resultBitMask += "1"
  76.                         }
  77.                         //accessLevels[level] = parseInt(resultBitMask, 2);
  78.                         accessLevels[level] = {
  79.                             bitMask: parseInt(resultBitMask, 2)
  80.                         };
  81.                     }
  82.                     else console.log("Access Control Error: Could not parse '" + accessLevelDeclarations[level] + "' as access definition for level '" + level + "'")
  83.  
  84.                 }
  85.                 else {
  86.  
  87.                     var resultBitMask = 0;
  88.                     for(var role in accessLevelDeclarations[level]){
  89.                         if(userRoles.hasOwnProperty(accessLevelDeclarations[level][role]))
  90.                             resultBitMask = resultBitMask | userRoles[accessLevelDeclarations[level][role]].bitMask
  91.                         else console.log("Access Control Error: Could not find role '" + accessLevelDeclarations[level][role] + "' in registered roles while building access for '" + level + "'")
  92.                     }
  93.                     accessLevels[level] = {
  94.                         bitMask: resultBitMask
  95.                     };
  96.                 }
  97.             }
  98.  
  99.             return accessLevels;
  100.         }
  101.    
  102.         function userRoles() {
  103.             return buildRoles(config.roles);
  104.         }
  105.    
  106.         function accessLevels() {
  107.             buildAccessLevels(config.accessLevels, buildRoles(config.roles));
  108.         }
  109.        
  110.         function isAllowed(access) {
  111.             return accessLevels.bitMask & currentUser.role.bitMask;
  112.         }
  113.        
  114.         return {
  115.             userRoles: userRoles,
  116.             accessLevels: accessLevels,
  117.             $get: function ($http) {
  118.                 return {
  119.                     currentUser: currentUser,
  120.                     isAllowed: isAllowed,
  121.                     loadUserData: function () {
  122.                         return $http.get('/api/userData').then(function(res){
  123.                             angular.extend(currentUser, res.data);
  124.                             return currentUser;
  125.                         })
  126.                     }
  127.                 }
  128.             }
  129.         }
  130.     });
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Not a member of Pastebin yet?
Sign Up, it unlocks many cool features!
 
Top