@l3dev/abac 0.1.0
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/LICENSE +21 -0
- package/README.md +98 -0
- package/build/abac.d.ts +72 -0
- package/build/abac.js +65 -0
- package/build/abac.js.map +1 -0
- package/build/action.d.ts +61 -0
- package/build/action.js +54 -0
- package/build/action.js.map +1 -0
- package/build/actionGroup.d.ts +44 -0
- package/build/actionGroup.js +47 -0
- package/build/actionGroup.js.map +1 -0
- package/build/actionVisitor.d.ts +29 -0
- package/build/actionVisitor.js +64 -0
- package/build/actionVisitor.js.map +1 -0
- package/build/index.d.ts +9 -0
- package/build/index.js +3 -0
- package/build/index.js.map +1 -0
- package/build/internal/collections.d.ts +12 -0
- package/build/internal/collections.js +2 -0
- package/build/internal/collections.js.map +1 -0
- package/build/internal/core.d.ts +19 -0
- package/build/internal/core.js +2 -0
- package/build/internal/core.js.map +1 -0
- package/build/internal/paths.d.ts +45 -0
- package/build/internal/paths.js +2 -0
- package/build/internal/paths.js.map +1 -0
- package/build/permission.d.ts +53 -0
- package/build/permission.js +153 -0
- package/build/permission.js.map +1 -0
- package/build/policy.d.ts +49 -0
- package/build/policy.js +72 -0
- package/build/policy.js.map +1 -0
- package/build/policyFilters.d.ts +9 -0
- package/build/policyFilters.js +21 -0
- package/build/policyFilters.js.map +1 -0
- package/build/resource.d.ts +75 -0
- package/build/resource.js +71 -0
- package/build/resource.js.map +1 -0
- package/package.json +28 -0
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import {} from "./action.js";
|
|
2
|
+
export class Resource {
|
|
3
|
+
_name;
|
|
4
|
+
_title = null;
|
|
5
|
+
_description = null;
|
|
6
|
+
_ownable = false;
|
|
7
|
+
_ownConfigurable = false;
|
|
8
|
+
_actions = {};
|
|
9
|
+
_subResources = {};
|
|
10
|
+
constructor(name) {
|
|
11
|
+
this._name = name;
|
|
12
|
+
}
|
|
13
|
+
get name() {
|
|
14
|
+
return this._name;
|
|
15
|
+
}
|
|
16
|
+
get title() {
|
|
17
|
+
return this._title;
|
|
18
|
+
}
|
|
19
|
+
setTitle(title) {
|
|
20
|
+
this._title = title;
|
|
21
|
+
return this;
|
|
22
|
+
}
|
|
23
|
+
get description() {
|
|
24
|
+
return this._description;
|
|
25
|
+
}
|
|
26
|
+
setDescription(description) {
|
|
27
|
+
this._description = description;
|
|
28
|
+
return this;
|
|
29
|
+
}
|
|
30
|
+
get ownable() {
|
|
31
|
+
return this._ownable;
|
|
32
|
+
}
|
|
33
|
+
get ownConfigurable() {
|
|
34
|
+
return this._ownConfigurable;
|
|
35
|
+
}
|
|
36
|
+
setOwnable(ownable, configurable = true) {
|
|
37
|
+
this._ownable = ownable;
|
|
38
|
+
this._ownConfigurable = configurable;
|
|
39
|
+
return this;
|
|
40
|
+
}
|
|
41
|
+
withSubject() {
|
|
42
|
+
return this;
|
|
43
|
+
}
|
|
44
|
+
withObject() {
|
|
45
|
+
return this;
|
|
46
|
+
}
|
|
47
|
+
withAdditionalContext() {
|
|
48
|
+
return this;
|
|
49
|
+
}
|
|
50
|
+
get actions() {
|
|
51
|
+
return this._actions;
|
|
52
|
+
}
|
|
53
|
+
setActions(actions) {
|
|
54
|
+
this._actions = actions.reduce((acc, action) => ({
|
|
55
|
+
...acc,
|
|
56
|
+
[action.name]: action
|
|
57
|
+
}), {});
|
|
58
|
+
return this;
|
|
59
|
+
}
|
|
60
|
+
get subResources() {
|
|
61
|
+
return this._subResources;
|
|
62
|
+
}
|
|
63
|
+
setSubResources(resources) {
|
|
64
|
+
this._subResources = resources.reduce((acc, resource) => ({
|
|
65
|
+
...acc,
|
|
66
|
+
[resource.name]: resource
|
|
67
|
+
}), {});
|
|
68
|
+
return this;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=resource.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resource.js","sourceRoot":"","sources":["../src/resource.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,MAAM,aAAa,CAAC;AAwBxD,MAAM,OAAO,QAAQ;IACZ,KAAK,CAAQ;IACb,MAAM,GAAkB,IAAI,CAAC;IAC7B,YAAY,GAAkB,IAAI,CAAC;IACnC,QAAQ,GAAwB,KAAK,CAAC;IACtC,gBAAgB,GAAY,KAAK,CAAC;IAClC,QAAQ,GAAwB,EAAyB,CAAC;IAC1D,aAAa,GAA6B,EAA8B,CAAC;IAEjF,YAAY,IAAW;QACtB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,IAAW,IAAI;QACd,OAAO,IAAI,CAAC,KAAK,CAAC;IACnB,CAAC;IAED,IAAW,KAAK;QACf,OAAO,IAAI,CAAC,MAAM,CAAC;IACpB,CAAC;IAEM,QAAQ,CAAC,KAAa;QAC5B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,OAAO,IAAI,CAAC;IACb,CAAC;IAED,IAAW,WAAW;QACrB,OAAO,IAAI,CAAC,YAAY,CAAC;IAC1B,CAAC;IAEM,cAAc,CAAC,WAAmB;QACxC,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;QAChC,OAAO,IAAI,CAAC;IACb,CAAC;IAED,IAAW,OAAO;QACjB,OAAO,IAAI,CAAC,QAAQ,CAAC;IACtB,CAAC;IAED,IAAW,eAAe;QACzB,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC9B,CAAC;IAEM,UAAU,CAA2B,OAAiB,EAAE,YAAY,GAAG,IAAI;QACjF,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,gBAAgB,GAAG,YAAY,CAAC;QACrC,OAAO,IAQN,CAAC;IACH,CAAC;IAEM,WAAW;QACjB,OAAO,IAYN,CAAC;IACH,CAAC;IAEM,UAAU;QAChB,OAAO,IAYN,CAAC;IACH,CAAC;IAEM,qBAAqB;QAC3B,OAAO,IAQN,CAAC;IACH,CAAC;IAED,IAAI,OAAO;QACV,OAAO,IAAI,CAAC,QAAQ,CAAC;IACtB,CAAC;IAEM,UAAU,CAChB,OAAmB;QAEnB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,MAAM,CAC7B,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;YACjB,GAAG,GAAG;YACN,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM;SACrB,CAAC,EACF,EAAE,CACF,CAAC;QACF,OAAO,IAQN,CAAC;IACH,CAAC;IAED,IAAI,YAAY;QACf,OAAO,IAAI,CAAC,aAAa,CAAC;IAC3B,CAAC;IAEM,eAAe,CAAwC,SAAuB;QACpF,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC,MAAM,CACpC,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;YACnB,GAAG,GAAG;YACN,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ;SACzB,CAAC,EACF,EAAE,CACF,CAAC;QACF,OAAO,IAQN,CAAC;IACH,CAAC;CACD","sourcesContent":["import { type Action, type RuleCtx } from \"./action.js\";\nimport type { ActionGroup } from \"./actionGroup.js\";\nimport type {\n\tActionMap,\n\tResourceMap,\n\tToActionMap,\n\tUnionToResourceMap\n} from \"./internal/collections.js\";\nimport type { Expand, UnsetMarker } from \"./internal/core.js\";\n\nexport type ResourceContext = {\n\tctx: RuleCtx;\n\tactions: ActionMap | UnsetMarker;\n\tsubResources: ResourceMap | UnsetMarker;\n\townable: boolean;\n};\n\nexport type AnyResourceContext = {\n\tctx: RuleCtx;\n\tactions: ActionMap;\n\tsubResources: ResourceMap;\n\townable: boolean;\n};\n\nexport class Resource<TName extends string, TContext extends ResourceContext = AnyResourceContext> {\n\tprivate _name: TName;\n\tprivate _title: string | null = null;\n\tprivate _description: string | null = null;\n\tprivate _ownable: TContext[\"ownable\"] = false;\n\tprivate _ownConfigurable: boolean = false;\n\tprivate _actions: TContext[\"actions\"] = {} as TContext[\"actions\"];\n\tprivate _subResources: TContext[\"subResources\"] = {} as TContext[\"subResources\"];\n\n\tconstructor(name: TName) {\n\t\tthis._name = name;\n\t}\n\n\tpublic get name(): TName {\n\t\treturn this._name;\n\t}\n\n\tpublic get title(): string | null {\n\t\treturn this._title;\n\t}\n\n\tpublic setTitle(title: string) {\n\t\tthis._title = title;\n\t\treturn this;\n\t}\n\n\tpublic get description(): string | null {\n\t\treturn this._description;\n\t}\n\n\tpublic setDescription(description: string) {\n\t\tthis._description = description;\n\t\treturn this;\n\t}\n\n\tpublic get ownable(): boolean {\n\t\treturn this._ownable;\n\t}\n\n\tpublic get ownConfigurable(): boolean {\n\t\treturn this._ownConfigurable;\n\t}\n\n\tpublic setOwnable<TOwnable extends boolean>(ownable: TOwnable, configurable = true) {\n\t\tthis._ownable = ownable;\n\t\tthis._ownConfigurable = configurable;\n\t\treturn this as unknown as Resource<\n\t\t\tTName,\n\t\t\t{\n\t\t\t\tctx: TContext[\"ctx\"];\n\t\t\t\tactions: TContext[\"actions\"];\n\t\t\t\tsubResources: TContext[\"subResources\"];\n\t\t\t\townable: TOwnable;\n\t\t\t}\n\t\t>;\n\t}\n\n\tpublic withSubject<TSubject>() {\n\t\treturn this as unknown as Resource<\n\t\t\tTName,\n\t\t\t{\n\t\t\t\tctx: Expand<\n\t\t\t\t\tOmit<TContext[\"ctx\"], \"subject\"> & {\n\t\t\t\t\t\tsubject: TSubject;\n\t\t\t\t\t}\n\t\t\t\t>;\n\t\t\t\tactions: TContext[\"actions\"];\n\t\t\t\tsubResources: TContext[\"subResources\"];\n\t\t\t\townable: TContext[\"ownable\"];\n\t\t\t}\n\t\t>;\n\t}\n\n\tpublic withObject<TObject>() {\n\t\treturn this as unknown as Resource<\n\t\t\tTName,\n\t\t\t{\n\t\t\t\tctx: Expand<\n\t\t\t\t\tOmit<TContext[\"ctx\"], \"object\"> & {\n\t\t\t\t\t\tobject: TObject;\n\t\t\t\t\t}\n\t\t\t\t>;\n\t\t\t\tactions: TContext[\"actions\"];\n\t\t\t\tsubResources: TContext[\"subResources\"];\n\t\t\t\townable: TContext[\"ownable\"];\n\t\t\t}\n\t\t>;\n\t}\n\n\tpublic withAdditionalContext<TAdditionalContext extends object>() {\n\t\treturn this as unknown as Resource<\n\t\t\tTName,\n\t\t\t{\n\t\t\t\tctx: TContext[\"ctx\"] & TAdditionalContext;\n\t\t\t\tactions: TContext[\"actions\"];\n\t\t\t\tsubResources: TContext[\"subResources\"];\n\t\t\t\townable: TContext[\"ownable\"];\n\t\t\t}\n\t\t>;\n\t}\n\n\tget actions(): TContext[\"actions\"] {\n\t\treturn this._actions;\n\t}\n\n\tpublic setActions<TActions extends Action<any, any> | ActionGroup<any, any>>(\n\t\tactions: TActions[]\n\t) {\n\t\tthis._actions = actions.reduce(\n\t\t\t(acc, action) => ({\n\t\t\t\t...acc,\n\t\t\t\t[action.name]: action\n\t\t\t}),\n\t\t\t{}\n\t\t);\n\t\treturn this as unknown as Resource<\n\t\t\tTName,\n\t\t\t{\n\t\t\t\tctx: TContext[\"ctx\"];\n\t\t\t\tactions: Expand<ToActionMap<TActions>>;\n\t\t\t\tsubResources: TContext[\"subResources\"];\n\t\t\t\townable: TContext[\"ownable\"];\n\t\t\t}\n\t\t>;\n\t}\n\n\tget subResources(): TContext[\"subResources\"] {\n\t\treturn this._subResources;\n\t}\n\n\tpublic setSubResources<TResources extends Resource<any, any>>(resources: TResources[]) {\n\t\tthis._subResources = resources.reduce(\n\t\t\t(acc, resource) => ({\n\t\t\t\t...acc,\n\t\t\t\t[resource.name]: resource\n\t\t\t}),\n\t\t\t{}\n\t\t);\n\t\treturn this as unknown as Resource<\n\t\t\tTName,\n\t\t\t{\n\t\t\t\tctx: TContext[\"ctx\"];\n\t\t\t\tactions: TContext[\"actions\"];\n\t\t\t\tsubResources: Expand<UnionToResourceMap<TResources>>;\n\t\t\t\townable: TContext[\"ownable\"];\n\t\t\t}\n\t\t>;\n\t}\n}\n"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@l3dev/abac",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Type-safe attribute-based access control library",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./build/index.js",
|
|
7
|
+
"types": "./build/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./build/index.d.ts",
|
|
11
|
+
"import": "./build/index.js"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"files": [
|
|
15
|
+
"build"
|
|
16
|
+
],
|
|
17
|
+
"author": "l3dotdev",
|
|
18
|
+
"license": "MIT",
|
|
19
|
+
"homepage": "https://github.com/l3dotdev/npm-packages/tree/main/abac",
|
|
20
|
+
"repository": {
|
|
21
|
+
"type": "git",
|
|
22
|
+
"url": "https://github.com/l3dotdev/npm-packages.git"
|
|
23
|
+
},
|
|
24
|
+
"scripts": {
|
|
25
|
+
"build": "tsc -p tsconfig.json",
|
|
26
|
+
"package": "pnpm build"
|
|
27
|
+
}
|
|
28
|
+
}
|