/** * angular-permission * Route permission and access control as simple as it can get * @version v2.0.2 - 2016-02-03 * @link http://www.rafaelvidaurre.com * @author Rafael Vidaurre * @license MIT License, http://www.opensource.org/licenses/MIT */ !function(){"use strict";var a=angular.module("permission",["ui.router"]);a.config(["$stateProvider",function(a){a.decorator("parent",function(a,b){return a.self.getState=function(){return a},b(a)})}]),a.run(["$rootScope","$state","$q","Authorization","PermissionMap",function(a,b,c,d,e){a.$on("$stateChangeStart",function(c,f,g,h,i,j){function k(a){return angular.isDefined(a.data)&&angular.isDefined(a.data.permissions)}function l(a){angular.extend(f,{$$isAuthorizationFinished:a})}function m(){return r()||q()}function n(a){var c=new e({redirectTo:a.redirectTo}),d=b.get(f.name).getState().path.slice().reverse();return angular.forEach(d,function(a){k(a)&&c.extendPermissionMap(new e(a.data.permissions))}),c}function o(b){d.authorize(b,g).then(function(){a.$broadcast("$stateChangePermissionAccepted",f,g,j),p(f.name)})["catch"](function(c){a.$broadcast("$stateChangePermissionDenied",f,g,j),b.redirectToState(c)})}function p(c){b.go(c,g,angular.extend({},j,{notify:!1})).then(function(){a.$broadcast("$stateChangeSuccess",f,g,h,i,j)})}function q(){return a.$broadcast("$stateChangeStart",f,g,h,i,j).defaultPrevented}function r(){return a.$broadcast("$stateChangePermissionStart",f,g,j).defaultPrevented}if(!f.$$isAuthorizationFinished&&k(f)&&(c.preventDefault(),l(!0),!m())){var s=n(f.data.permissions);o(s)}})}])}(),function(){"use strict";angular.module("permission").factory("PermissionMap",["$q","$state",function(a,b){function c(a,b,c,d){this.only=g(a.only,b,c,d),this.except=g(a.except,b,c,d),this.redirectTo=a.redirectTo}function d(b,c){a.when(b.call(null,c)).then(function(a){if(!angular.isString(a))throw new TypeError('When used "redirectTo" as function, returned value must be string with state name');f(a)})}function e(a,b){if(!angular.isDefined(a["default"]))throw new ReferenceError('When used "redirectTo" as object, property "default" must be defined');var c=a[b];angular.isDefined(c)||(c=a["default"]),angular.isFunction(c)&&d(c,b),angular.isString(c)&&f(c)}function f(a,c,d){b.go(a,c,d)}function g(a,b,c,d){return angular.isString(a)?[a]:angular.isArray(a)?a:angular.isFunction(a)?a.call(null,b,c,d):[]}return c.prototype.extendPermissionMap=function(a){this.only=this.only.concat(a.only),this.except=this.except.concat(a.except)},c.prototype.redirectToState=function(a){angular.isFunction(this.redirectTo)&&d(this.redirectTo,a),angular.isObject(this.redirectTo)&&e(this.redirectTo,a),angular.isString(this.redirectTo)&&f(this.redirectTo,this.toParams,this.options)},c}])}(),function(){"use strict";angular.module("permission").factory("Permission",["$q",function(a){function b(a,b){d(a,b),this.permissionName=a,this.validationFunction=b}function c(b,c){var d=a.defer();return b?d.resolve(c):d.reject(c),d.promise}function d(a,b){if(!angular.isString(a))throw new TypeError('Parameter "permissionName" name must be String');if(!angular.isFunction(b))throw new TypeError('Parameter "validationFunction" must be Function')}return b.prototype.validatePermission=function(a){var b=this.validationFunction.call(null,a,this.permissionName);return angular.isFunction(b.then)||(b=c(b,this.permissionName)),b},b}])}(),function(){"use strict";angular.module("permission").factory("Role",["$q","PermissionStore",function(a,b){function c(a,c,d){e(a,c,d),this.roleName=a,this.permissionNames=c||[],d&&b.defineManyPermissions(c,d)}function d(b,c){var d=a.defer();return b?d.resolve(c):d.reject(c),d.promise}function e(a,b,c){if(!angular.isString(a))throw new TypeError('Parameter "roleName" name must be String');if(!angular.isArray(b))throw new TypeError('Parameter "permissionNames" must be Array');if(!b.length&&!angular.isFunction(c))throw new TypeError('Parameter "validationFunction" must be provided for empty "permissionNames" array')}return c.prototype.validateRole=function(c){if(this.permissionNames.length){var e=this.permissionNames.map(function(e){if(b.hasPermissionDefinition(e)){var f=b.getPermissionDefinition(e),g=f.validationFunction.call(null,c,f.permissionName);return angular.isFunction(g.then)||(g=d(g)),g}return a.reject(null)});return a.all(e)}var f=this.validationFunction.call(null,c,this.roleName);return angular.isFunction(f.then)||(f=d(f,this.roleName)),a.resolve(f)},c}])}(),function(){"use strict";angular.module("permission").service("PermissionStore",["Permission",function(a){function b(b,c){i[b]=new a(b,c)}function c(a,c){if(!angular.isArray(a))throw new TypeError('Parameter "permissionNames" name must be Array');angular.forEach(a,function(a){b(a,c)})}function d(a){delete i[a]}function e(a){return angular.isDefined(i[a])}function f(a){return i[a]}function g(){return i}function h(){i={}}var i={};this.definePermission=b,this.defineManyPermissions=c,this.removePermissionDefinition=d,this.hasPermissionDefinition=e,this.getPermissionDefinition=f,this.getStore=g,this.clearStore=h}])}(),function(){"use strict";angular.module("permission").service("RoleStore",["Role",function(a){function b(b,c,d){h[b]=new a(b,c,d)}function c(a){delete h[a]}function d(a){return angular.isDefined(h[a])}function e(a){return h[a]}function f(){return h}function g(){h={}}var h={};this.defineRole=b,this.getRoleDefinition=e,this.hasRoleDefinition=d,this.removeRoleDefinition=c,this.getStore=f,this.clearStore=g}])}(),function(){"use strict";angular.module("permission").directive("permission",["$log","Authorization","PermissionMap",function(a,b,c){return{restrict:"A",link:function(d,e,f){try{b.authorize(new c({only:d.$eval(f.only),except:d.$eval(f.except)}),null).then(function(){e.removeClass("ng-hide")})["catch"](function(){e.addClass("ng-hide")})}catch(g){e.addClass("ng-hide"),a.error(g.message)}}}}])}(),function(){"use strict";angular.module("permission").service("Authorization",["$q","PermissionMap","PermissionStore","RoleStore",function(a,b,c,d){function e(a,b){return f(a,b)}function f(b,c){var d=a.defer(),e=g(b.except,c);return a.all(e).then(function(b){return b.length?void d.reject(b):a.reject(null)})["catch"](function(){var e=g(b.only,c);a.all(e).then(function(a){d.resolve(a)})["catch"](function(a){d.reject(a)})}),d.promise}function g(b,e){return b.map(function(b){return d.hasRoleDefinition(b)?h(b,e):c.hasPermissionDefinition(b)?i(b,e):b?a.reject(b):void 0})}function h(a,b){var c=d.getRoleDefinition(a);return c.validateRole(b)}function i(a,b){var d=c.getPermissionDefinition(a);return d.validatePermission(b)}this.authorize=e}])}(); //# sourceMappingURL=angular-permission.min.js.map