diff --git a/packages/casl-ability/spec/rulesToAST.spec.js b/packages/casl-ability/spec/rulesToAST.spec.js index 9868d0062..e60062d48 100644 --- a/packages/casl-ability/spec/rulesToAST.spec.js +++ b/packages/casl-ability/spec/rulesToAST.spec.js @@ -44,7 +44,12 @@ describe('rulesToAST', () => { expect(ast).to.deep.equal({ operator: 'and', value: [ - { operator: 'eq', field: 'private', value: true }, + { + operator: 'not', + value: [ + { operator: 'eq', field: 'private', value: true } + ] + }, { operator: 'or', value: [ diff --git a/packages/casl-ability/src/extra.ts b/packages/casl-ability/src/extra.ts index b70a1f079..2ed93b82e 100644 --- a/packages/casl-ability/src/extra.ts +++ b/packages/casl-ability/src/extra.ts @@ -1,4 +1,4 @@ -import { Condition, buildAnd, buildOr } from '@ucast/mongo2js'; +import { Condition, buildAnd, buildOr, CompoundCondition } from '@ucast/mongo2js'; import { PureAbility, AnyAbility } from './PureAbility'; import { RuleOf } from './RuleIndex'; import { RawRule } from './RawRule'; @@ -45,7 +45,8 @@ function ruleToAST(rule: RuleOf): Condition { if (!rule.ast) { throw new Error(`Ability rule "${JSON.stringify(rule)}" does not have "ast" property. So, cannot be used to generate AST`); } - return rule.ast; + + return rule.inverted ? new CompoundCondition('not', [rule.ast]) : rule.ast; } export function rulesToAST(