browser.js.map

Summary

Maintainability
Test Coverage
{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap 3a2704427055cd538d06","webpack:///./bundle.js","webpack:///./dmv.js","webpack:///./noun.js","webpack:///./afterSetup.js","webpack:///./role.js","webpack:///./nouns.js","webpack:///./nounManager.js","webpack:///./roleManager.js","webpack:///./roles.js","webpack:///./angularPlugin.js","webpack:///./canMixin.js"],"names":[],"mappings":"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","file":"./browser.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"dmv\"] = factory();\n\telse\n\t\troot[\"dmv\"] = factory();\n})(this, function() {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 3a2704427055cd538d06\n **/","'use strict';\n\n// we need to expose the dmv api\nmodule.exports = require('./dmv');\n// angular code just needs to run. it will register module with angular\nif(typeof angular !== 'undefined') {\n  require('./angularPlugin');\n}\n\n\n/** WEBPACK FOOTER **\n ** ./bundle.js\n **/","/**\n * @fileOverview This is the root of the project. It allows users to register nouns and roles with dmv. It also exports plugins.\n * @module main\n * @requires Noun\n * @requires Role\n * @requires RoleManager\n * @requires NounManager\n */\n\n'use strict';\nconst Noun = require('./noun');\nconst Role = require('./role');\n\nconst RoleManager = require('./roleManager');\nconst NounManager = require('./nounManager');\nconst nouns = require('./nouns');\nconst roles = require('./roles');\n\nconst addEntity = function (store, Constructor, name, after) {\n  if(!store.get(name)) { store.set(name, new Constructor(name)); }\n  const instance = store.get(name);\n  if(this.setupRan) { instance.setupRan = true; }\n  if(after) { instance._afterSetup(after); }\n  return instance;\n};\n\n/**\n * Register a new noun\n * @param  {string} name - noun name\n * @param  {function} after - fn to run after setup. Passed noun instance. \n * @return {noun}       returns noun instance\n */\nexports.noun = addEntity.bind(exports, nouns, Noun);\n\n/**\n * Register a new role\n * @param  {string} name - role name\n * @param  {function} after - fn to run after setup. Passed role instance. \n * @return {role}       returns role instance\n */\nexports.role = addEntity.bind(exports, roles, Role);\n\n/**\n * Gets all registered nouns. Must be called after setup\n * @return {Iterator<Noun>}\n */\nexports.getAllNouns = function() {\n  return Array.from(nouns.values());\n};\n\nexports.getNoun = nouns.get.bind(nouns);\nexports.getRole = roles.get.bind(roles);\n\n/**\n* Empty nouns and roles, resetting dmv. Use with caution.\n*/\nexports.reset = function () {\n  nouns.clear();\n  roles.clear();\n};\n\nsetTimeout(function() {\n  var entities = Array.from(nouns.values()).concat(Array.from(roles.values()));\n  entities.forEach( (instance) => instance.setup() );\n  exports.setupRan = true;\n}, 0);\n\n\n/** WEBPACK FOOTER **\n ** ./dmv.js\n **/","'use strict';\n/**\n * @class  Noun\n */\n\nclass Noun extends require('./afterSetup'){\n  /**\n   * @param  {string} name - name of noun\n   * @return {noun}        - the created noun\n   */\n  constructor(name) {\n    super();\n    this.name = name;\n    this.verbs = new Set();\n    this.permissions = {};\n    ['create','read','update','delete'].forEach( (v) => this.verb(v), this);\n  }\n\n  /**\n   * Checks to see if noun has verb\n   * @param  {string}  verb\n   * @return {Boolean}\n   */\n  hasVerb(verb) {\n    return this.verbs.has(verb);\n  }\n\n  /**\n   * Adds verb to the set of posible verbs that can be authorized. For example, `post.can('like')` would add the verb 'like' to a noun 'post'\n   * @param  {string} verb\n   */\n  verb(verb) {\n    this.verbs.add(verb);\n  }\n\n  /**\n   * Removes a verb from the set of possible verbs. Useful for removing default crud.\n   * @param  {string} verb\n   */\n  removeVerb(verb) {\n    this.verbs.delete(verb);\n  }\n\n  /**\n   * Authorizes a role to perform a verb.\n   * @param  {string} role\n   * @param  {string[]|string} verbs - Either the string '*', which authorizes all possible verbs to the given role, or an array of verbs to authorize.\n   */\n  authorize(role, verbs) {\n    if(verbs === '*') {\n      verbs = this.verbs;\n    } else {\n      verbs = verbs.filter( (v) => this.verbs.has(v), this);\n    }\n    this.permissions[role] = this.permissions[role] || new Set();\n    verbs.forEach( (v) => this.permissions[role].add(v) );\n  }\n\n  /**\n   * Checks if a role is regestered and it has the permission\n   * @param  {string} role\n   * @param  {string} verb\n   * @return {boolean}\n   */\n  checkAuthorization(role, verb) {\n    return !!this.permissions[role] && this.permissions[role].has(verb);\n  }\n\n}\n\nmodule.exports = Noun;\n\n\n/** WEBPACK FOOTER **\n ** ./noun.js\n **/","'use strict';\n\nmodule.exports = class AfterSetup {\n  constructor() {\n    this._afterSetupFns = [];\n  }\n\n  _afterSetup(fn) {\n    if(this.setupRan) {\n      fn.call(this, this);\n    }\n    this._afterSetupFns.push(fn);\n  }\n\n  setup() {\n    this._afterSetupFns.forEach( (fn) => fn.call(this, this), this);\n    this.setupRan = true;\n  }\n}\n\n\n/** WEBPACK FOOTER **\n ** ./afterSetup.js\n **/","'use strict';\n/**\n * @class Role\n */\nconst nouns = require('./nouns');\n\nclass Role extends require('./afterSetup'){\n  constructor(name) {\n    super();\n    this.name = name;\n  }\n\n  /**\n   * Checks if a given noun can perform a given verb\n   * @function\n   * @example\n   * someRole.can('eat','brick'); // -> true\n   * @param  {string} verb\n   * @param  {string} noun\n   * @return {boolean}\n   */\n  can(verb, noun) {\n    if(!nouns.has(noun)) { return false; }\n    return nouns.get(noun).checkAuthorization(this.name, verb);\n  }\n\n  /**\n   * Authorizes this role to perform an array of actions on a verb\n   * @function\n   * @see  Noun#authorize\n   * @example  someRole.authorize(['create','read'], 'kitten');\n   * @param  {String[]|String} verbs - Either an array of verbs already regestered with the noun, or `'*'` to allow access to all verbs\n   * @param  {String} noun\n   */\n  authorize(verbs, noun) {\n    if(!nouns.has(noun)) { throw new Error(`cannot authorize ${noun}`); }\n    nouns.get(noun).authorize(this.name, verbs);\n  }\n}\n\n\nmodule.exports = Role;\n\n\n/** WEBPACK FOOTER **\n ** ./role.js\n **/","'use strict';\n\nconst NounManager = require('./nounManager');\n\nmodule.exports = new NounManager();\n\n\n/** WEBPACK FOOTER **\n ** ./nouns.js\n **/","'use strict';\n\n/** @todo  extends Map */\nclass NounManager {\n  constructor() {\n    this.map = new Map();\n    this.set = this.map.set.bind(this.map);\n    this.get = this.map.get.bind(this.map);\n    this.has = this.map.has.bind(this.map);\n    this.values = this.map.values.bind(this.map);\n    this.clear = this.map.clear.bind(this.map);\n  }\n}\n\nmodule.exports = NounManager;\n\n\n/** WEBPACK FOOTER **\n ** ./nounManager.js\n **/","'use strict';\n/**\n * @module  RoleManager\n */\n\n\n/** @todo  extends Map */\nclass RoleManager {\n\n  constructor() {\n    this.map = new Map();\n    this.set = this.map.set.bind(this.map);\n    this.get = this.map.get.bind(this.map);\n    this.has = this.map.has.bind(this.map);\n    this.values = this.map.values.bind(this.map);\n    this.clear = this.map.clear.bind(this.map);\n  }\n  can(roles, verb, noun) {\n    return roles.map(r => this.get(r) || { can: () => false })\n      .some(r => r.can(verb, noun));\n  }\n}\n\nmodule.exports = RoleManager;\n\n\n/** WEBPACK FOOTER **\n ** ./roleManager.js\n **/","'use strict';\n\nconst RoleManager = require('./roleManager');\n\nmodule.exports = new RoleManager();\n\n\n/** WEBPACK FOOTER **\n ** ./roles.js\n **/","'use strict';\n\n/**\n * @description An angular module that hooks into $stateChangeStart event on UI-Router and lets routes define permissions\n * @example\n * .factory('yourLoginFactory', function(authConfig) {\n *   // on login\n *   authConfig.setUser(yourUser) // <- YOUR USER MUST HAVE CAN METHOD\n * })\n * @module plugins/angular\n */\n\nconst dmv = require('./dmv');\nconst roleManager = require('./roleManager');\nconst canMixin = require('./canMixin');\n\nangular.module('dmv', [])\n  .factory('canPlugin', function() {\n    return function(proto) {\n      angular.extend(proto, canMixin);\n    };\n  })\n  .factory('authConfig', [\"$rootScope\", \"$injector\", function($rootScope, $injector) {\n\n    let userGetterMethod = function() {};\n    let asyncUserGetterMethod = function() {};\n    let canGetUserAsync = false;\n\n    const getUser = function() {\n      return $injector.invoke(userGetterMethod);\n    };\n    const getUserAsync = function() {\n      return $injector.invoke(asyncUserGetterMethod);\n    };\n\n    return {\n      getUserAsync: function(fn) {\n        asyncUserGetterMethod = fn;\n        canGetUserAsync = true;\n      },\n      getUser: function(fn) {\n        userGetterMethod = fn;\n\n        $rootScope.can = (verb, noun) => {\n          try { \n            return getUser().can(verb, noun);\n          } catch (e) {\n            return false;\n          }\n        }\n        $rootScope.hasRole = role => {\n          try { \n           return getUser().hasRole(role);\n          } catch (e) {\n            return false;\n          }\n        }\n\n\n        $rootScope.$on('$stateChangeStart', function(event, next) {\n          let user = getUser();\n          if (canGetUserAsync) {\n            user = getUserAsync();\n          }\n          return Promise.resolve(user)\n            .then(user => {\n              if(next && next.auth) {\n                if(!user) {\n                  $rootScope.$broadcast('NOT_AUTHENTICATED');\n                  event.preventDefault();\n                  return;\n                }\n                if(next.auth === true) { return; }\n                if(typeof next.auth === 'function') {\n                  if(!next.auth.call(event, user, next)) {\n                    event.preventDefault();\n                    $rootScope.$broadcast('NOT_AUTHORIZED');\n                  }\n                  return;\n                }\n                for(let verb in next.auth) {\n                  if(next.auth.hasOwnProperty(verb)) {\n                    let noun = next.auth[verb];\n                    if(!user.can(verb, noun)) {\n                      event.preventDefault();\n                      $rootScope.$broadcast('NOT_AUTHORIZED');\n                      return;\n                    }\n                  }\n                }\n              }\n\n            });\n        });\n      }\n    };\n\n  }]);\n\n\n\n\n/** WEBPACK FOOTER **\n ** ./angularPlugin.js\n **/","'use strict';\n\nconst roles = require('./roles');\n\nconst onPermissionList = (list, verb, noun) => {\n  return list && !!list.find(item => item.verb === verb && item.noun === noun);\n};\n\n/**\n * Checks if a user has the ability to perform an action on a noun\n * @memberOf plugins/mongoose\n * @param  {string} verb\n * @param  {string} noun\n * @return {boolean}\n */\nexports.can = function(verb, noun) {\n  if(onPermissionList(this.permissionWhiteList, verb, noun)) {\n    return true;\n  } else if(onPermissionList(this.permissionBlackList, verb, noun)) {\n    return false;\n  } else {\n    return roles.can(this.roles, verb, noun);\n  }\n};\n\n/**\n * Determines if user has role or roles\n * @param  {String|Array}  r role\n * @return {Boolean}\n */\nexports.hasRole = function(r) {\n  if (typeof r === 'string'){\n    return this.roles.indexOf(r) !== -1;\n  } else if (Array.isArray(r)) {\n    return !r.some(role => this.roles.indexOf(role) === -1)\n  }\n};\n\n\n/** WEBPACK FOOTER **\n ** ./canMixin.js\n **/"],"sourceRoot":""}