UNPKG

@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.48 kB
import{buildOr as r,buildAnd as n,CompoundCondition as t}from"@ucast/mongo2js";function i(r){return Array.isArray(r)?r:[r]}function e(r,n,t){var i=r;var e=n;if(n.indexOf(".")!==-1){var u=n.split(".");e=u.pop();i=u.reduce((function(r,n){r[n]=r[n]||{};return r[n]}),r)}i[e]=t}var u=function r(n){return Array.isArray(n)?n.join(","):n};function o(r,n){return r.map((function(r){var t=[u(r.action||r.actions),typeof n==="function"?i(r.subject).map(n).join(","):u(r.subject),r.conditions||0,r.inverted?1:0,r.fields?u(r.fields):0,r.reason||""];while(t.length>0&&!t[t.length-1])t.pop();return t}))}function f(r,n){return r.map((function(r){var t=r[0],i=r[1],e=r[2],u=r[3],o=r[4],f=r[5];var a=i.split(",");var c={inverted:!!u,action:t.split(","),subject:typeof n==="function"?a.map(n):a};if(e)c.conditions=e;if(o)c.fields=o.split(",");if(f)c.reason=f;return c}))}function a(r,n,t,i){var e=r.detectSubjectType(t);var u=r.possibleRulesFor(n,e);var o=new Set;var f=o.delete.bind(o);var a=o.add.bind(o);var c=u.length;while(c--){var v=u[c];if(v.matchesConditions(t)){var s=v.inverted?f:a;i.fieldsFrom(v).forEach(s)}}return Array.from(o)}var c=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 a(this.t,this.i,n,{fieldsFrom:this.o(n)})};n.of=function r(n){return a(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 v(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,i){var e=[];var u=[];var o=r.rulesFor(n,t);for(var f=0;f<o.length;f++){var a=o[f];var c=a.inverted?e:u;if(!a.conditions)if(a.inverted)break;else return e.length?{$and:e}:{};else c.push(i(a))}if(!u.length)return null;return e.length?{$or:u,$and:e}:{$or:u}}function h(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 t("not",[r.ast]):r.ast}function l(t,i,e){var u=s(t,i,e,h);if(u===null)return null;if(!u.$and)return u.$or?r(u.$or):n([]);if(u.$or)u.$and.push(r(u.$or));return n(u.$and)}export{c as AccessibleFields,o as packRules,a as permittedFieldsOf,l as rulesToAST,v as rulesToFields,s as rulesToQuery,f as unpackRules}; //# sourceMappingURL=index.js.map