@via-profit/ability 3.5.0 → 3.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +336 -350
- package/dist/index.d.ts +10 -8
- package/dist/index.js +31 -19
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -338,6 +338,13 @@ declare class AbilityTypeGenerator {
|
|
|
338
338
|
private formatNestedObject;
|
|
339
339
|
}
|
|
340
340
|
|
|
341
|
+
type AbilityResultStateCodeType = 'allow' | 'deny' | 'neutral';
|
|
342
|
+
declare class AbilityResultState extends AbilityCode<AbilityResultStateCodeType> {
|
|
343
|
+
static allow: AbilityResultState;
|
|
344
|
+
static deny: AbilityResultState;
|
|
345
|
+
static neutral: AbilityResultState;
|
|
346
|
+
}
|
|
347
|
+
|
|
341
348
|
declare class AbilityResult<Resource extends ResourceObject = Record<string, unknown>> {
|
|
342
349
|
/**
|
|
343
350
|
* Already checked policies (after call the policy.check())
|
|
@@ -352,14 +359,9 @@ declare class AbilityResult<Resource extends ResourceObject = Record<string, unk
|
|
|
352
359
|
*/
|
|
353
360
|
explain(): readonly AbilityExplain[];
|
|
354
361
|
getLastMatchedPolicy(): AbilityPolicy<Resource> | null;
|
|
362
|
+
getFinalState(): AbilityResultState;
|
|
355
363
|
isAllowed(): boolean;
|
|
356
364
|
isDenied(): boolean;
|
|
357
|
-
/**
|
|
358
|
-
* Get the last effect of the policy
|
|
359
|
-
*
|
|
360
|
-
* @returns {AbilityPolicyEffect | null}
|
|
361
|
-
*/
|
|
362
|
-
getLastEffectOfMatchedPolicy(): AbilityPolicyEffect | null;
|
|
363
365
|
}
|
|
364
366
|
|
|
365
367
|
declare class AbilityResolver<Resources extends ResourcesMap, Environment = unknown> {
|
|
@@ -570,5 +572,5 @@ declare class AbilityDSLLexer {
|
|
|
570
572
|
private isAtEnd;
|
|
571
573
|
}
|
|
572
574
|
|
|
573
|
-
export { AbilityCode, AbilityCompare, AbilityCondition, AbilityDSLLexer, AbilityDSLParser, AbilityDSLToken, AbilityError, AbilityExplain, AbilityExplainPolicy, AbilityExplainRule, AbilityExplainRuleSet, AbilityJSONParser, AbilityMatch, AbilityParserError, AbilityPolicy, AbilityPolicyEffect, AbilityResolver, AbilityResult, AbilityRule, AbilityRuleSet, AbilityTypeGenerator };
|
|
574
|
-
export type { AbilityCompareCodeType, AbilityConditionCodeType, AbilityConditionLiteralType, AbilityExplainConfig, AbilityExplainType, AbilityMatchCodeType, AbilityPolicyConfig, AbilityPolicyConstructorProps, AbilityPolicyEffectCodeType, AbilityRuleConfig, AbilityRuleConstructorProps, AbilityRuleSetConfig, AbilityRuleSetConstructorProps, NestedDict, Primitive, ResourceObject, ResourcesMap, TokenType };
|
|
575
|
+
export { AbilityCode, AbilityCompare, AbilityCondition, AbilityDSLLexer, AbilityDSLParser, AbilityDSLToken, AbilityError, AbilityExplain, AbilityExplainPolicy, AbilityExplainRule, AbilityExplainRuleSet, AbilityJSONParser, AbilityMatch, AbilityParserError, AbilityPolicy, AbilityPolicyEffect, AbilityResolver, AbilityResult, AbilityResultState, AbilityRule, AbilityRuleSet, AbilityTypeGenerator };
|
|
576
|
+
export type { AbilityCompareCodeType, AbilityConditionCodeType, AbilityConditionLiteralType, AbilityExplainConfig, AbilityExplainType, AbilityMatchCodeType, AbilityPolicyConfig, AbilityPolicyConstructorProps, AbilityPolicyEffectCodeType, AbilityResultStateCodeType, AbilityRuleConfig, AbilityRuleConstructorProps, AbilityRuleSetConfig, AbilityRuleSetConstructorProps, NestedDict, Primitive, ResourceObject, ResourcesMap, TokenType };
|
package/dist/index.js
CHANGED
|
@@ -364,7 +364,11 @@ class AbilityExplain {
|
|
|
364
364
|
toString(indent = 0) {
|
|
365
365
|
const pad = ' '.repeat(indent);
|
|
366
366
|
const mark = this.match.code === AbilityMatch.match.code ? '✓' : '✗';
|
|
367
|
-
let out =
|
|
367
|
+
let out = '';
|
|
368
|
+
if (this.type === 'policy') {
|
|
369
|
+
out += '\n';
|
|
370
|
+
}
|
|
371
|
+
out += `${pad}${mark} ${this.type} «${this.name}» is ${this.match.code}`;
|
|
368
372
|
this.children.forEach(child => {
|
|
369
373
|
out += '\n' + child.toString(indent + 1);
|
|
370
374
|
});
|
|
@@ -518,6 +522,12 @@ class AbilityPolicyEffect extends AbilityCode {
|
|
|
518
522
|
static permit = new AbilityPolicyEffect('permit');
|
|
519
523
|
}
|
|
520
524
|
|
|
525
|
+
class AbilityResultState extends AbilityCode {
|
|
526
|
+
static allow = new AbilityResultState('allow');
|
|
527
|
+
static deny = new AbilityResultState('deny');
|
|
528
|
+
static neutral = new AbilityResultState('neutral');
|
|
529
|
+
}
|
|
530
|
+
|
|
521
531
|
class AbilityResult {
|
|
522
532
|
/**
|
|
523
533
|
* Already checked policies (after call the policy.check())
|
|
@@ -545,27 +555,28 @@ class AbilityResult {
|
|
|
545
555
|
}
|
|
546
556
|
return null;
|
|
547
557
|
}
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
}
|
|
552
|
-
isDenied() {
|
|
553
|
-
const effect = this.getLastEffectOfMatchedPolicy();
|
|
554
|
-
return effect?.isEqual(AbilityPolicyEffect.deny) ?? true;
|
|
555
|
-
}
|
|
556
|
-
/**
|
|
557
|
-
* Get the last effect of the policy
|
|
558
|
-
*
|
|
559
|
-
* @returns {AbilityPolicyEffect | null}
|
|
560
|
-
*/
|
|
561
|
-
getLastEffectOfMatchedPolicy() {
|
|
562
|
-
for (let i = this.policies.length - 1; i >= 0; i--) {
|
|
563
|
-
const p = this.policies[i];
|
|
558
|
+
getFinalState() {
|
|
559
|
+
let state = AbilityResultState.neutral;
|
|
560
|
+
for (const p of this.policies) {
|
|
564
561
|
if (p.matchState.isEqual(AbilityMatch.match)) {
|
|
565
|
-
|
|
562
|
+
if (p.effect.isEqual(AbilityPolicyEffect.permit)) {
|
|
563
|
+
state = AbilityResultState.allow;
|
|
564
|
+
}
|
|
565
|
+
else if (p.effect.isEqual(AbilityPolicyEffect.deny)) {
|
|
566
|
+
state = AbilityResultState.deny;
|
|
567
|
+
}
|
|
568
|
+
}
|
|
569
|
+
else if (p.matchState.isEqual(AbilityMatch.mismatch)) {
|
|
570
|
+
state = AbilityResultState.neutral;
|
|
566
571
|
}
|
|
567
572
|
}
|
|
568
|
-
return
|
|
573
|
+
return state;
|
|
574
|
+
}
|
|
575
|
+
isAllowed() {
|
|
576
|
+
return this.getFinalState().isEqual(AbilityResultState.allow);
|
|
577
|
+
}
|
|
578
|
+
isDenied() {
|
|
579
|
+
return this.getFinalState().isNotEqual(AbilityResultState.allow);
|
|
569
580
|
}
|
|
570
581
|
}
|
|
571
582
|
|
|
@@ -2185,6 +2196,7 @@ exports.AbilityPolicy = AbilityPolicy;
|
|
|
2185
2196
|
exports.AbilityPolicyEffect = AbilityPolicyEffect;
|
|
2186
2197
|
exports.AbilityResolver = AbilityResolver;
|
|
2187
2198
|
exports.AbilityResult = AbilityResult;
|
|
2199
|
+
exports.AbilityResultState = AbilityResultState;
|
|
2188
2200
|
exports.AbilityRule = AbilityRule;
|
|
2189
2201
|
exports.AbilityRuleSet = AbilityRuleSet;
|
|
2190
2202
|
exports.AbilityTypeGenerator = AbilityTypeGenerator;
|