Yuki Takei 6 лет назад
Родитель
Сommit
98baad10b2
2 измененных файлов с 7 добавлено и 0 удалено
  1. 3 0
      src/server/service/passport.js
  2. 4 0
      src/test/service/passport.test.js

+ 3 - 0
src/server/service/passport.js

@@ -730,6 +730,9 @@ class PassportService {
     if (luceneOperator === 'AND') {
       return this.evaluateRule(attributes, luceneRuleLeft) && this.evaluateRule(attributes, luceneRuleRight);
     }
+    if (luceneOperator === 'NOT') {
+      return this.evaluateRule(attributes, luceneRuleLeft) && !this.evaluateRule(attributes, luceneRuleRight);
+    }
 
     throw new Error(`Unsupported operator: ${luceneOperator}`);
   }

+ 4 - 0
src/test/service/passport.test.js

@@ -37,6 +37,10 @@ describe('PassportService test', () => {
       ${10}       | ${['B']}      | ${['Leader']} | ${'(Department: A || Department: B) && Position: Leader'}       | ${true}
       ${11}       | ${['C']}      | ${['Leader']} | ${'(Department: A || Department: B) && Position: Leader'}       | ${false}
       ${12}       | ${['A', 'B']} | ${[]}         | ${'(Department: A || Department: B) && Position: Leader'}       | ${false}
+      ${13}       | ${['A']}      | ${[]}         | ${'Department: A NOT Position: Leader'}                         | ${true}
+      ${14}       | ${['A']}      | ${['Leader']} | ${'Department: A NOT Position: Leader'}                         | ${false}
+      ${15}       | ${[]}         | ${['Leader']} | ${'Department: A OR (Position NOT Position: User)'}             | ${true}
+      ${16}       | ${[]}         | ${['User']}   | ${'Department: A OR (Position NOT Position: User)'}             | ${false}
     `('to be $expected under rule="$ruleStr"', ({
       conditionId, departments, positions, ruleStr, expected,
     }) => {