SHARE
TWEET
Untitled
a guest
Dec 16th, 2014
165
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
- 'use strict';
- angular.module('xenon.providers', []).
- provider('Authentication', function () {
- var currentUser = {};
- currentUser.isLoggedIn = function() {
- return !!currentUser.name;
- }
- currentUser.logout = function() {
- $http.post('/logout');
- _.each(currentUser, function(property) {
- this[property] = undefined;
- });
- }
- var config = {
- roles : [
- 'public',
- 'user',
- 'admin'
- ],
- // user : allowed access
- accessLevels : {
- 'public' : "*",
- 'anon' : ['public'],
- 'user' : ['user', 'admin'],
- 'admin' : ['admin']
- }
- }
- /*
- Method to build a distinct bit mask for each role
- It starts off with "1" and shifts the bit to the left for each element in the roles array parameter
- */
- function buildRoles(roles) {
- var bitMask = "01";
- var userRoles = {};
- for(var role in roles){
- var intCode = parseInt(bitMask, 2);
- userRoles[roles[role]] = {
- bitMask: intCode,
- title: roles[role]
- };
- bitMask = (intCode << 1 ).toString(2)
- }
- return userRoles;
- }
- /*
- 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.
- */
- function buildAccessLevels(accessLevelDeclarations, userRoles) {
- var accessLevels = {};
- for(var level in accessLevelDeclarations){
- if(typeof accessLevelDeclarations[level] == 'string'){
- if(accessLevelDeclarations[level] == '*'){
- var resultBitMask = '';
- for( var role in userRoles){
- resultBitMask += "1"
- }
- //accessLevels[level] = parseInt(resultBitMask, 2);
- accessLevels[level] = {
- bitMask: parseInt(resultBitMask, 2)
- };
- }
- else console.log("Access Control Error: Could not parse '" + accessLevelDeclarations[level] + "' as access definition for level '" + level + "'")
- }
- else {
- var resultBitMask = 0;
- for(var role in accessLevelDeclarations[level]){
- if(userRoles.hasOwnProperty(accessLevelDeclarations[level][role]))
- resultBitMask = resultBitMask | userRoles[accessLevelDeclarations[level][role]].bitMask
- else console.log("Access Control Error: Could not find role '" + accessLevelDeclarations[level][role] + "' in registered roles while building access for '" + level + "'")
- }
- accessLevels[level] = {
- bitMask: resultBitMask
- };
- }
- }
- return accessLevels;
- }
- function userRoles() {
- return buildRoles(config.roles);
- }
- function accessLevels() {
- buildAccessLevels(config.accessLevels, buildRoles(config.roles));
- }
- function isAllowed(access) {
- return accessLevels.bitMask & currentUser.role.bitMask;
- }
- return {
- userRoles: userRoles,
- accessLevels: accessLevels,
- $get: function ($http) {
- return {
- currentUser: currentUser,
- isAllowed: isAllowed,
- loadUserData: function () {
- return $http.get('/api/userData').then(function(res){
- angular.extend(currentUser, res.data);
- return currentUser;
- })
- }
- }
- }
- }
- });
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.

