factor-based-permissions 0.0.2 → 0.0.3
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/dist/index.d.ts +5 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +21 -26
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
export declare class FactorBasedPermissions<TFactor extends number, TPermission extends number> {
|
|
2
|
-
private
|
|
2
|
+
private _satisfiedFactors;
|
|
3
3
|
private _permissionsLookup;
|
|
4
4
|
private _permissionCheckLookup;
|
|
5
|
+
private _serialized;
|
|
5
6
|
constructor(serialized?: string | null | undefined);
|
|
6
|
-
private
|
|
7
|
+
private _parseSatisfiedFactors;
|
|
7
8
|
private _parsePermissions;
|
|
8
9
|
checkPermission(permission: TPermission): boolean | null;
|
|
9
|
-
getSatisfiedFactors(permission
|
|
10
|
+
getSatisfiedFactors(permission?: TPermission): TFactor[];
|
|
10
11
|
getMissingFactors(permission: TPermission): TFactor[];
|
|
12
|
+
get serialized(): string;
|
|
11
13
|
}
|
|
12
14
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAmBA,qBAAa,sBAAsB,CAAC,OAAO,SAAS,MAAM,EAAE,WAAW,SAAS,MAAM;IACpF,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAmBA,qBAAa,sBAAsB,CAAC,OAAO,SAAS,MAAM,EAAE,WAAW,SAAS,MAAM;IACpF,OAAO,CAAC,iBAAiB,CAAsB;IAC/C,OAAO,CAAC,kBAAkB,CAAqC;IAC/D,OAAO,CAAC,sBAAsB,CAA0C;IACxE,OAAO,CAAC,WAAW,CAAM;gBAEN,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;IASzD,OAAO,CAAC,sBAAsB;IAU9B,OAAO,CAAC,iBAAiB;IAclB,eAAe,CAAC,UAAU,EAAE,WAAW;IAuBvC,mBAAmB,CAAC,UAAU,CAAC,EAAE,WAAW;IAa5C,iBAAiB,CAAC,UAAU,EAAE,WAAW;IAUhD,IAAW,UAAU,WAEpB;CACF"}
|
package/dist/index.js
CHANGED
|
@@ -14,77 +14,72 @@ function parseNumeric(value) {
|
|
|
14
14
|
return parseInt(value, 32);
|
|
15
15
|
}
|
|
16
16
|
export class FactorBasedPermissions {
|
|
17
|
-
|
|
17
|
+
_satisfiedFactors = new Set();
|
|
18
18
|
_permissionsLookup = new Map();
|
|
19
19
|
_permissionCheckLookup = new Map();
|
|
20
|
+
_serialized = "";
|
|
20
21
|
constructor(serialized) {
|
|
21
22
|
if (typeof serialized === "string") {
|
|
22
23
|
const matches = groupsRegex.exec(serialized);
|
|
23
|
-
this.
|
|
24
|
+
this._parseSatisfiedFactors(matches?.[1] ?? null);
|
|
24
25
|
this._parsePermissions(matches?.[2] ?? null);
|
|
26
|
+
this._serialized = serialized;
|
|
25
27
|
}
|
|
26
28
|
}
|
|
27
|
-
|
|
28
|
-
if (!satisfiedFactorsGroup)
|
|
29
|
+
_parseSatisfiedFactors(satisfiedFactorsGroup) {
|
|
30
|
+
if (!satisfiedFactorsGroup)
|
|
29
31
|
return;
|
|
30
|
-
}
|
|
31
32
|
for (const factor of satisfiedFactorsGroup.split(ITEMS_DELIM)) {
|
|
32
33
|
const factorNumeric = parseNumeric(factor);
|
|
33
|
-
this.
|
|
34
|
+
this._satisfiedFactors.add(factorNumeric);
|
|
34
35
|
}
|
|
35
36
|
}
|
|
36
37
|
_parsePermissions(permissionGroupsGroup) {
|
|
37
|
-
if (!permissionGroupsGroup)
|
|
38
|
+
if (!permissionGroupsGroup)
|
|
38
39
|
return;
|
|
39
|
-
}
|
|
40
40
|
for (const permissionGroup of permissionGroupsGroup.split(GROUP_DELIM)) {
|
|
41
41
|
const [permissionsRaw, requiredFactorsRaw] = permissionGroup.split(REQUIRED_FACTORS_DELIM);
|
|
42
42
|
const permissions = permissionsRaw?.split(ITEMS_DELIM)?.map((parseNumeric)) ?? [];
|
|
43
43
|
const requiredFactors = requiredFactorsRaw?.split(ITEMS_DELIM)?.map((parseNumeric)) ?? [];
|
|
44
|
-
for (const permission of permissions)
|
|
44
|
+
for (const permission of permissions)
|
|
45
45
|
this._permissionsLookup.set(permission, requiredFactors);
|
|
46
|
-
}
|
|
47
|
-
for (const requiredFactor of requiredFactors) {
|
|
48
|
-
if (!this._factorsLookup.has(requiredFactor)) {
|
|
49
|
-
this._factorsLookup.set(requiredFactor, false);
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
46
|
}
|
|
53
47
|
}
|
|
54
48
|
checkPermission(permission) {
|
|
55
49
|
const cachedResult = this._permissionCheckLookup.get(permission);
|
|
56
|
-
if (cachedResult !== undefined)
|
|
50
|
+
if (cachedResult !== undefined)
|
|
57
51
|
return cachedResult;
|
|
58
|
-
}
|
|
59
52
|
const requiredFactors = this._permissionsLookup.get(permission);
|
|
60
53
|
if (!requiredFactors) {
|
|
61
54
|
this._permissionCheckLookup.set(permission, null);
|
|
62
55
|
return null;
|
|
63
56
|
}
|
|
64
|
-
for (const requiredFactor of requiredFactors)
|
|
65
|
-
if (!this.
|
|
57
|
+
for (const requiredFactor of requiredFactors)
|
|
58
|
+
if (!this._satisfiedFactors.has(requiredFactor)) {
|
|
66
59
|
this._permissionCheckLookup.set(permission, false);
|
|
67
60
|
return false;
|
|
68
61
|
}
|
|
69
|
-
}
|
|
70
62
|
this._permissionCheckLookup.set(permission, true);
|
|
71
63
|
return true;
|
|
72
64
|
}
|
|
73
65
|
getSatisfiedFactors(permission) {
|
|
66
|
+
if (!permission)
|
|
67
|
+
return [...this._satisfiedFactors];
|
|
74
68
|
const cachedResult = this._permissionCheckLookup.get(permission);
|
|
75
69
|
const requiredFactors = this._permissionsLookup.get(permission) ?? [];
|
|
76
|
-
if (cachedResult === true)
|
|
70
|
+
if (cachedResult === true)
|
|
77
71
|
return requiredFactors;
|
|
78
|
-
|
|
79
|
-
return requiredFactors.filter((factor) => this._factorsLookup.get(factor));
|
|
72
|
+
return requiredFactors.filter((factor) => this._satisfiedFactors.has(factor));
|
|
80
73
|
}
|
|
81
74
|
getMissingFactors(permission) {
|
|
82
75
|
const cachedResult = this._permissionCheckLookup.get(permission);
|
|
83
|
-
if (cachedResult === true)
|
|
76
|
+
if (cachedResult === true)
|
|
84
77
|
return [];
|
|
85
|
-
}
|
|
86
78
|
const requiredFactors = this._permissionsLookup.get(permission) ?? [];
|
|
87
|
-
return requiredFactors.filter((factor) => !this.
|
|
79
|
+
return requiredFactors.filter((factor) => !this._satisfiedFactors.has(factor));
|
|
80
|
+
}
|
|
81
|
+
get serialized() {
|
|
82
|
+
return this._serialized;
|
|
88
83
|
}
|
|
89
84
|
}
|
|
90
85
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,MAAM,wBAAwB,GAAG,GAAG,CAAC;AACrC,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAC/B,MAAM,WAAW,GAAG,GAAG,CAAC;AACxB,MAAM,WAAW,GAAG,GAAG,CAAC;AACxB,MAAM,sBAAsB,GAAG,GAAG,CAAC;AAEnC,MAAM,WAAW,GAAG,gBAAgB,EAAE,CAAC;AAEvC,SAAS,gBAAgB;IACvB,MAAM,aAAa,GAAG,wBAAwB,GAAG,kBAAkB,CAAC;IACpE,MAAM,qBAAqB,GAAG,MAAM,wBAAwB,MAAM,aAAa,OAAO,CAAC;IACvF,MAAM,qBAAqB,GAAG,MAAM,kBAAkB,MAAM,aAAa,OAAO,CAAC;IACjF,OAAO,IAAI,MAAM,CAAC,qBAAqB,GAAG,qBAAqB,CAAC,CAAC;AACnE,CAAC;AAED,SAAS,YAAY,CAAmB,KAAa;IACnD,OAAO,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAM,CAAC;AAClC,CAAC;AAED,MAAM,OAAO,sBAAsB;IACzB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|