@casl/ability
Version:
CASL is an isomorphic authorization JavaScript library which restricts what resources a given user is allowed to access
3 lines (2 loc) • 2.77 kB
JavaScript
(function(r,n){typeof exports==="object"&&typeof module!=="undefined"?n(exports,require("@ucast/mongo2js")):typeof define==="function"&&define.amd?define(["exports","@ucast/mongo2js"],n):(r=typeof globalThis!=="undefined"?globalThis:r||self,n((r.casl=r.casl||{},r.casl.extra={}),r.ucast.mongo2js))})(this,(function(r,n){"use strict";function t(r){return Array.isArray(r)?r:[r]}function e(r,n,t){var e=r;var i=n;if(n.indexOf(".")!==-1){var u=n.split(".");i=u.pop();e=u.reduce((function(r,n){r[n]=r[n]||{};return r[n]}),r)}e[i]=t}var i=function r(n){return Array.isArray(n)?n.join(","):n};function u(r,n){return r.map((function(r){var e=[i(r.action||r.actions),typeof n==="function"?t(r.subject).map(n).join(","):i(r.subject),r.conditions||0,r.inverted?1:0,r.fields?i(r.fields):0,r.reason||""];while(e.length>0&&!e[e.length-1])e.pop();return e}))}function o(r,n){return r.map((function(r){var t=r[0],e=r[1],i=r[2],u=r[3],o=r[4],f=r[5];var a=e.split(",");var c={inverted:!!u,action:t.split(","),subject:typeof n==="function"?a.map(n):a};if(i)c.conditions=i;if(o)c.fields=o.split(",");if(f)c.reason=f;return c}))}function f(r,n,t,e){var i=r.detectSubjectType(t);var u=r.possibleRulesFor(n,i);var o=new Set;var f=o.delete.bind(o);var a=o.add.bind(o);var c=u.length;while(c--){var s=u[c];if(s.matchesConditions(t)){var v=s.inverted?f:a;e.fieldsFrom(s).forEach(v)}}return Array.from(o)}var a=function(){function r(r,n,t){this.t=r;this.i=n;this.u=t}var n=r.prototype;n.ofType=function r(n){return f(this.t,this.i,n,{fieldsFrom:this.o(n)})};n.of=function r(n){return f(this.t,this.i,n,{fieldsFrom:this.o(this.t.detectSubjectType(n))})};n.o=function r(n){var t=this;return function(r){return r.fields||t.u(n)}};return r}();function c(r,n,t){return r.rulesFor(n,t).reduce((function(r,n){if(n.inverted||!n.conditions)return r;return Object.keys(n.conditions).reduce((function(r,t){var i=n.conditions[t];if(!i||i.constructor!==Object)e(r,t,i);return r}),r)}),{})}function s(r,n,t,e){var i=[];var u=[];var o=r.rulesFor(n,t);for(var f=0;f<o.length;f++){var a=o[f];var c=a.inverted?i:u;if(!a.conditions)if(a.inverted)break;else return i.length?{$and:i}:{};else c.push(e(a))}if(!u.length)return null;return i.length?{$or:u,$and:i}:{$or:u}}function v(r){if(!r.ast)throw new Error('Ability rule "'+JSON.stringify(r)+'" does not have "ast" property. So, cannot be used to generate AST');return r.inverted?new n.CompoundCondition("not",[r.ast]):r.ast}function l(r,t,e){var i=s(r,t,e,v);if(i===null)return null;if(!i.$and)return i.$or?n.buildOr(i.$or):n.buildAnd([]);if(i.$or)i.$and.push(n.buildOr(i.$or));return n.buildAnd(i.$and)}r.AccessibleFields=a;r.packRules=u;r.permittedFieldsOf=f;r.rulesToAST=l;r.rulesToFields=c;r.rulesToQuery=s;r.unpackRules=o}));
//# sourceMappingURL=index.js.map