@webiny/api-core 6.1.0-beta.3 → 6.2.0-beta.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/exports/api/build-params.d.ts +1 -0
- package/exports/api/build-params.js +1 -0
- package/exports/api/build-params.js.map +1 -1
- package/exports/api/event-publisher.d.ts +1 -0
- package/exports/api/event-publisher.js +1 -0
- package/exports/api/event-publisher.js.map +1 -1
- package/exports/api/key-value-store.d.ts +1 -0
- package/exports/api/key-value-store.js +1 -0
- package/exports/api/key-value-store.js.map +1 -1
- package/exports/api/logger.d.ts +1 -0
- package/exports/api/logger.js +1 -0
- package/exports/api/logger.js.map +1 -1
- package/exports/api/security.d.ts +4 -0
- package/exports/api/security.js +3 -0
- package/exports/api/security.js.map +1 -1
- package/exports/api.d.ts +4 -0
- package/exports/api.js +6 -0
- package/exports/api.js.map +1 -0
- package/features/security/authorization/AuthorizationContext/AuthorizationContext.d.ts +1 -0
- package/features/security/authorization/AuthorizationContext/AuthorizationContext.js +14 -2
- package/features/security/authorization/AuthorizationContext/AuthorizationContext.js.map +1 -1
- package/features/security/permissions/createPermissionSchema.d.ts +2 -0
- package/features/security/permissions/createPermissionSchema.js +8 -0
- package/features/security/permissions/createPermissionSchema.js.map +1 -0
- package/features/security/permissions/createPermissions.d.ts +3 -6
- package/features/security/permissions/createPermissions.js +198 -188
- package/features/security/permissions/createPermissions.js.map +1 -1
- package/features/security/permissions/index.d.ts +2 -1
- package/features/security/permissions/index.js +2 -1
- package/features/security/permissions/index.js.map +1 -1
- package/features/wcp/WcpContext/decorators/WcpContextWithFeatureFlagsDecorator.js +2 -2
- package/features/wcp/WcpContext/decorators/WcpContextWithFeatureFlagsDecorator.js.map +1 -1
- package/package.json +20 -63
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["BuildParam","BuildParams"],"sources":["build-params.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"names":["BuildParam","BuildParams"],"sources":["build-params.ts"],"sourcesContent":["/** @deprecated Import from \"webiny/api\" instead. */\nexport { BuildParam, BuildParams } from \"~/features/buildParams/index.js\";\n"],"mappings":"AAAA;AACA,SAASA,UAAU,EAAEC,WAAW","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["DomainEvent","EventPublisher"],"sources":["event-publisher.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"names":["DomainEvent","EventPublisher"],"sources":["event-publisher.ts"],"sourcesContent":["/** @deprecated Import from \"webiny/api\" instead. */\nexport { DomainEvent, EventPublisher } from \"~/features/eventPublisher/index.js\";\n"],"mappings":"AAAA;AACA,SAASA,WAAW,EAAEC,cAAc","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["GlobalKeyValueStore","KeyValueStore"],"sources":["key-value-store.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"names":["GlobalKeyValueStore","KeyValueStore"],"sources":["key-value-store.ts"],"sourcesContent":["/** @deprecated Import from \"webiny/api\" instead. */\nexport { GlobalKeyValueStore, KeyValueStore } from \"~/features/keyValueStore/index.js\";\n"],"mappings":"AAAA;AACA,SAASA,mBAAmB,EAAEC,aAAa","ignoreList":[]}
|
package/exports/api/logger.d.ts
CHANGED
package/exports/api/logger.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Logger"],"sources":["logger.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"names":["Logger"],"sources":["logger.ts"],"sourcesContent":["/** @deprecated Import from \"webiny/api\" instead. */\nexport { Logger } from \"~/features/logger/index.js\";\n"],"mappings":"AAAA;AACA,SAASA,MAAM","ignoreList":[]}
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
export { createPermissionSchema } from "../../features/security/permissions/index.js";
|
|
2
|
+
export { createPermissionsFeature } from "../../features/security/permissions/index.js";
|
|
3
|
+
export { createPermissionsAbstraction } from "../../features/security/permissions/index.js";
|
|
4
|
+
export type { Permissions } from "../../features/security/permissions/index.js";
|
|
1
5
|
export { IdentityContext, Identity } from "../../features/security/IdentityContext/index.js";
|
|
2
6
|
export { ApiKeyFactory } from "../../features/security/apiKeys/shared/abstractions.js";
|
|
3
7
|
export { RoleFactory } from "../../features/security/roles/shared/abstractions.js";
|
package/exports/api/security.js
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
export { createPermissionSchema } from "../../features/security/permissions/index.js";
|
|
2
|
+
export { createPermissionsFeature } from "../../features/security/permissions/index.js";
|
|
3
|
+
export { createPermissionsAbstraction } from "../../features/security/permissions/index.js";
|
|
1
4
|
export { IdentityContext, Identity } from "../../features/security/IdentityContext/index.js";
|
|
2
5
|
export { ApiKeyFactory } from "../../features/security/apiKeys/shared/abstractions.js";
|
|
3
6
|
export { RoleFactory } from "../../features/security/roles/shared/abstractions.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["IdentityContext","Identity","ApiKeyFactory","RoleFactory","TeamFactory","ApiToken","IdentityProvider","OidcIdentityProvider","JwtIdentityProvider","Authenticator","Authorizer"],"sources":["security.ts"],"sourcesContent":["export { IdentityContext, Identity } from \"~/features/security/IdentityContext/index.js\";\nexport { ApiKeyFactory } from \"~/features/security/apiKeys/shared/abstractions.js\";\nexport { RoleFactory } from \"~/features/security/roles/shared/abstractions.js\";\nexport { TeamFactory } from \"~/features/security/teams/shared/abstractions.js\";\nexport { ApiToken } from \"~/domain/security/ApiToken.js\";\nexport { IdentityProvider, OidcIdentityProvider, JwtIdentityProvider } from \"~/idp/index.js\";\nexport { Authenticator } from \"~/features/security/authentication/Authenticator/abstractions.js\";\nexport { Authorizer } from \"~/features/security/authorization/Authorizer/index.js\";\n"],"mappings":"AAAA,SAASA,eAAe,EAAEC,QAAQ;AAClC,SAASC,aAAa;AACtB,SAASC,WAAW;AACpB,SAASC,WAAW;AACpB,SAASC,QAAQ;AACjB,SAASC,gBAAgB,EAAEC,oBAAoB,EAAEC,mBAAmB;AACpE,SAASC,aAAa;AACtB,SAASC,UAAU","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["createPermissionSchema","createPermissionsFeature","createPermissionsAbstraction","IdentityContext","Identity","ApiKeyFactory","RoleFactory","TeamFactory","ApiToken","IdentityProvider","OidcIdentityProvider","JwtIdentityProvider","Authenticator","Authorizer"],"sources":["security.ts"],"sourcesContent":["export { createPermissionSchema } from \"~/features/security/permissions/index.js\";\nexport { createPermissionsFeature } from \"~/features/security/permissions/index.js\";\nexport { createPermissionsAbstraction } from \"~/features/security/permissions/index.js\";\nexport type { Permissions } from \"~/features/security/permissions/index.js\";\nexport { IdentityContext, Identity } from \"~/features/security/IdentityContext/index.js\";\nexport { ApiKeyFactory } from \"~/features/security/apiKeys/shared/abstractions.js\";\nexport { RoleFactory } from \"~/features/security/roles/shared/abstractions.js\";\nexport { TeamFactory } from \"~/features/security/teams/shared/abstractions.js\";\nexport { ApiToken } from \"~/domain/security/ApiToken.js\";\nexport { IdentityProvider, OidcIdentityProvider, JwtIdentityProvider } from \"~/idp/index.js\";\nexport { Authenticator } from \"~/features/security/authentication/Authenticator/abstractions.js\";\nexport { Authorizer } from \"~/features/security/authorization/Authorizer/index.js\";\n"],"mappings":"AAAA,SAASA,sBAAsB;AAC/B,SAASC,wBAAwB;AACjC,SAASC,4BAA4B;AAErC,SAASC,eAAe,EAAEC,QAAQ;AAClC,SAASC,aAAa;AACtB,SAASC,WAAW;AACpB,SAASC,WAAW;AACpB,SAASC,QAAQ;AACjB,SAASC,gBAAgB,EAAEC,oBAAoB,EAAEC,mBAAmB;AACpE,SAASC,aAAa;AACtB,SAASC,UAAU","ignoreList":[]}
|
package/exports/api.d.ts
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { Logger } from "../features/logger/index.js";
|
|
2
|
+
export { BuildParam, BuildParams } from "../features/buildParams/index.js";
|
|
3
|
+
export { DomainEvent, EventPublisher } from "../features/eventPublisher/index.js";
|
|
4
|
+
export { GlobalKeyValueStore, KeyValueStore } from "../features/keyValueStore/index.js";
|
package/exports/api.js
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { Logger } from "../features/logger/index.js";
|
|
2
|
+
export { BuildParam, BuildParams } from "../features/buildParams/index.js";
|
|
3
|
+
export { DomainEvent, EventPublisher } from "../features/eventPublisher/index.js";
|
|
4
|
+
export { GlobalKeyValueStore, KeyValueStore } from "../features/keyValueStore/index.js";
|
|
5
|
+
|
|
6
|
+
//# sourceMappingURL=api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Logger","BuildParam","BuildParams","DomainEvent","EventPublisher","GlobalKeyValueStore","KeyValueStore"],"sources":["api.ts"],"sourcesContent":["export { Logger } from \"~/features/logger/index.js\";\nexport { BuildParam, BuildParams } from \"~/features/buildParams/index.js\";\nexport { DomainEvent, EventPublisher } from \"~/features/eventPublisher/index.js\";\nexport { GlobalKeyValueStore, KeyValueStore } from \"~/features/keyValueStore/index.js\";\n"],"mappings":"AAAA,SAASA,MAAM;AACf,SAASC,UAAU,EAAEC,WAAW;AAChC,SAASC,WAAW,EAAEC,cAAc;AACpC,SAASC,mBAAmB,EAAEC,aAAa","ignoreList":[]}
|
|
@@ -43,12 +43,24 @@ export class AuthorizationContext {
|
|
|
43
43
|
transformPermissions(permissions) {
|
|
44
44
|
const transformers = this.getTransformers();
|
|
45
45
|
if (transformers.length === 0) {
|
|
46
|
-
return permissions;
|
|
46
|
+
return this.deduplicatePermissions(permissions);
|
|
47
47
|
}
|
|
48
|
-
|
|
48
|
+
const transformed = permissions.map(permission => {
|
|
49
49
|
// A transformer can return one or multiple permissions, so we flatten the result.
|
|
50
50
|
return transformers.map(t => t.execute(permission)).flat();
|
|
51
51
|
}).flat();
|
|
52
|
+
return this.deduplicatePermissions(transformed);
|
|
53
|
+
}
|
|
54
|
+
deduplicatePermissions(permissions) {
|
|
55
|
+
const seen = new Set();
|
|
56
|
+
return permissions.filter(permission => {
|
|
57
|
+
const key = JSON.stringify(permission);
|
|
58
|
+
if (seen.has(key)) {
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
seen.add(key);
|
|
62
|
+
return true;
|
|
63
|
+
});
|
|
52
64
|
}
|
|
53
65
|
}
|
|
54
66
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["AsyncLocalStorage","authorizationEnabledStorage","AuthorizationContext","constructor","getAuthorizers","getTransformers","loadPermissions","identity","permissions","permissionsLoader","Promise","resolve","authorizers","authorizer","authorize","Array","isArray","transformPermissions","isAuthorizationEnabled","override","getStore","withoutAuthorization","cb","run","clearPermissionsCache","undefined","transformers","length","map","permission","t","execute","flat"],"sources":["AuthorizationContext.ts"],"sourcesContent":["import { AsyncLocalStorage } from \"async_hooks\";\nimport { AuthorizationContext as Abstraction, PermissionTransformer } from \"./abstractions.js\";\nimport { Authorizer } from \"../Authorizer/index.js\";\nimport type { SecurityPermission } from \"~/types/security.js\";\nimport { Identity } from \"~/features/security/IdentityContext/index.js\";\n\nconst authorizationEnabledStorage = new AsyncLocalStorage<boolean>();\n\nexport class AuthorizationContext implements Abstraction.Interface {\n private permissions?: SecurityPermission[];\n private permissionsLoader?: Promise<SecurityPermission[]>;\n\n constructor(\n private getAuthorizers: () => Authorizer.Interface[],\n private getTransformers: () => PermissionTransformer.Interface[]\n ) {}\n\n async loadPermissions(identity: Identity): Promise<SecurityPermission[]> {\n if (this.permissions) {\n return this.permissions;\n }\n\n if (this.permissionsLoader) {\n return this.permissionsLoader;\n }\n\n this.permissionsLoader = new Promise<SecurityPermission[]>(async resolve => {\n // Execute authorizers in sequence until one returns permissions\n const authorizers = this.getAuthorizers();\n for (const authorizer of authorizers) {\n const permissions = await authorizer.authorize(identity);\n if (Array.isArray(permissions)) {\n this.permissions = this.transformPermissions(permissions);\n return resolve(this.permissions);\n }\n }\n\n // No authorizer returned permissions\n this.permissions = [];\n resolve(this.permissions);\n });\n\n return this.permissionsLoader;\n }\n\n isAuthorizationEnabled(): boolean {\n const override = authorizationEnabledStorage.getStore();\n return override ?? true;\n }\n\n withoutAuthorization<T>(cb: () => Promise<T>): Promise<T> {\n return authorizationEnabledStorage.run(false, cb);\n }\n\n clearPermissionsCache(): void {\n this.permissions = undefined;\n this.permissionsLoader = undefined;\n }\n\n private transformPermissions(permissions: SecurityPermission[]) {\n const transformers = this.getTransformers();\n if (transformers.length === 0) {\n return permissions;\n }\n\n
|
|
1
|
+
{"version":3,"names":["AsyncLocalStorage","authorizationEnabledStorage","AuthorizationContext","constructor","getAuthorizers","getTransformers","loadPermissions","identity","permissions","permissionsLoader","Promise","resolve","authorizers","authorizer","authorize","Array","isArray","transformPermissions","isAuthorizationEnabled","override","getStore","withoutAuthorization","cb","run","clearPermissionsCache","undefined","transformers","length","deduplicatePermissions","transformed","map","permission","t","execute","flat","seen","Set","filter","key","JSON","stringify","has","add"],"sources":["AuthorizationContext.ts"],"sourcesContent":["import { AsyncLocalStorage } from \"async_hooks\";\nimport { AuthorizationContext as Abstraction, PermissionTransformer } from \"./abstractions.js\";\nimport { Authorizer } from \"../Authorizer/index.js\";\nimport type { SecurityPermission } from \"~/types/security.js\";\nimport { Identity } from \"~/features/security/IdentityContext/index.js\";\n\nconst authorizationEnabledStorage = new AsyncLocalStorage<boolean>();\n\nexport class AuthorizationContext implements Abstraction.Interface {\n private permissions?: SecurityPermission[];\n private permissionsLoader?: Promise<SecurityPermission[]>;\n\n constructor(\n private getAuthorizers: () => Authorizer.Interface[],\n private getTransformers: () => PermissionTransformer.Interface[]\n ) {}\n\n async loadPermissions(identity: Identity): Promise<SecurityPermission[]> {\n if (this.permissions) {\n return this.permissions;\n }\n\n if (this.permissionsLoader) {\n return this.permissionsLoader;\n }\n\n this.permissionsLoader = new Promise<SecurityPermission[]>(async resolve => {\n // Execute authorizers in sequence until one returns permissions\n const authorizers = this.getAuthorizers();\n for (const authorizer of authorizers) {\n const permissions = await authorizer.authorize(identity);\n if (Array.isArray(permissions)) {\n this.permissions = this.transformPermissions(permissions);\n return resolve(this.permissions);\n }\n }\n\n // No authorizer returned permissions\n this.permissions = [];\n resolve(this.permissions);\n });\n\n return this.permissionsLoader;\n }\n\n isAuthorizationEnabled(): boolean {\n const override = authorizationEnabledStorage.getStore();\n return override ?? true;\n }\n\n withoutAuthorization<T>(cb: () => Promise<T>): Promise<T> {\n return authorizationEnabledStorage.run(false, cb);\n }\n\n clearPermissionsCache(): void {\n this.permissions = undefined;\n this.permissionsLoader = undefined;\n }\n\n private transformPermissions(permissions: SecurityPermission[]) {\n const transformers = this.getTransformers();\n if (transformers.length === 0) {\n return this.deduplicatePermissions(permissions);\n }\n\n const transformed = permissions\n .map(permission => {\n // A transformer can return one or multiple permissions, so we flatten the result.\n return transformers.map(t => t.execute(permission)).flat();\n })\n .flat();\n\n return this.deduplicatePermissions(transformed);\n }\n\n private deduplicatePermissions(permissions: SecurityPermission[]) {\n const seen = new Set<string>();\n\n return permissions.filter(permission => {\n const key = JSON.stringify(permission);\n if (seen.has(key)) {\n return false;\n }\n seen.add(key);\n return true;\n });\n }\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,aAAa;AAM/C,MAAMC,2BAA2B,GAAG,IAAID,iBAAiB,CAAU,CAAC;AAEpE,OAAO,MAAME,oBAAoB,CAAkC;EAI/DC,WAAWA,CACCC,cAA4C,EAC5CC,eAAwD,EAClE;IAAA,KAFUD,cAA4C,GAA5CA,cAA4C;IAAA,KAC5CC,eAAwD,GAAxDA,eAAwD;EACjE;EAEH,MAAMC,eAAeA,CAACC,QAAkB,EAAiC;IACrE,IAAI,IAAI,CAACC,WAAW,EAAE;MAClB,OAAO,IAAI,CAACA,WAAW;IAC3B;IAEA,IAAI,IAAI,CAACC,iBAAiB,EAAE;MACxB,OAAO,IAAI,CAACA,iBAAiB;IACjC;IAEA,IAAI,CAACA,iBAAiB,GAAG,IAAIC,OAAO,CAAuB,MAAMC,OAAO,IAAI;MACxE;MACA,MAAMC,WAAW,GAAG,IAAI,CAACR,cAAc,CAAC,CAAC;MACzC,KAAK,MAAMS,UAAU,IAAID,WAAW,EAAE;QAClC,MAAMJ,WAAW,GAAG,MAAMK,UAAU,CAACC,SAAS,CAACP,QAAQ,CAAC;QACxD,IAAIQ,KAAK,CAACC,OAAO,CAACR,WAAW,CAAC,EAAE;UAC5B,IAAI,CAACA,WAAW,GAAG,IAAI,CAACS,oBAAoB,CAACT,WAAW,CAAC;UACzD,OAAOG,OAAO,CAAC,IAAI,CAACH,WAAW,CAAC;QACpC;MACJ;;MAEA;MACA,IAAI,CAACA,WAAW,GAAG,EAAE;MACrBG,OAAO,CAAC,IAAI,CAACH,WAAW,CAAC;IAC7B,CAAC,CAAC;IAEF,OAAO,IAAI,CAACC,iBAAiB;EACjC;EAEAS,sBAAsBA,CAAA,EAAY;IAC9B,MAAMC,QAAQ,GAAGlB,2BAA2B,CAACmB,QAAQ,CAAC,CAAC;IACvD,OAAOD,QAAQ,IAAI,IAAI;EAC3B;EAEAE,oBAAoBA,CAAIC,EAAoB,EAAc;IACtD,OAAOrB,2BAA2B,CAACsB,GAAG,CAAC,KAAK,EAAED,EAAE,CAAC;EACrD;EAEAE,qBAAqBA,CAAA,EAAS;IAC1B,IAAI,CAAChB,WAAW,GAAGiB,SAAS;IAC5B,IAAI,CAAChB,iBAAiB,GAAGgB,SAAS;EACtC;EAEQR,oBAAoBA,CAACT,WAAiC,EAAE;IAC5D,MAAMkB,YAAY,GAAG,IAAI,CAACrB,eAAe,CAAC,CAAC;IAC3C,IAAIqB,YAAY,CAACC,MAAM,KAAK,CAAC,EAAE;MAC3B,OAAO,IAAI,CAACC,sBAAsB,CAACpB,WAAW,CAAC;IACnD;IAEA,MAAMqB,WAAW,GAAGrB,WAAW,CAC1BsB,GAAG,CAACC,UAAU,IAAI;MACf;MACA,OAAOL,YAAY,CAACI,GAAG,CAACE,CAAC,IAAIA,CAAC,CAACC,OAAO,CAACF,UAAU,CAAC,CAAC,CAACG,IAAI,CAAC,CAAC;IAC9D,CAAC,CAAC,CACDA,IAAI,CAAC,CAAC;IAEX,OAAO,IAAI,CAACN,sBAAsB,CAACC,WAAW,CAAC;EACnD;EAEQD,sBAAsBA,CAACpB,WAAiC,EAAE;IAC9D,MAAM2B,IAAI,GAAG,IAAIC,GAAG,CAAS,CAAC;IAE9B,OAAO5B,WAAW,CAAC6B,MAAM,CAACN,UAAU,IAAI;MACpC,MAAMO,GAAG,GAAGC,IAAI,CAACC,SAAS,CAACT,UAAU,CAAC;MACtC,IAAII,IAAI,CAACM,GAAG,CAACH,GAAG,CAAC,EAAE;QACf,OAAO,KAAK;MAChB;MACAH,IAAI,CAACO,GAAG,CAACJ,GAAG,CAAC;MACb,OAAO,IAAI;IACf,CAAC,CAAC;EACN;AACJ","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["createPermissionSchema","config","entities"],"sources":["createPermissionSchema.ts"],"sourcesContent":["import type { PermissionSchemaConfig } from \"./types.js\";\n\nexport function createPermissionSchema<const T extends PermissionSchemaConfig>(config: T): T {\n return {\n ...config,\n entities: config.entities ?? []\n };\n}\n"],"mappings":"AAEA,OAAO,SAASA,sBAAsBA,CAAyCC,MAAS,EAAK;EACzF,OAAO;IACH,GAAGA,MAAM;IACTC,QAAQ,EAAED,MAAM,CAACC,QAAQ,IAAI;EACjC,CAAC;AACL","ignoreList":[]}
|
|
@@ -1,8 +1,5 @@
|
|
|
1
|
+
import type { Abstraction } from "@webiny/di";
|
|
1
2
|
import type { PermissionSchemaConfig } from "./types.js";
|
|
2
3
|
import type { Permissions } from "./types.js";
|
|
3
|
-
export declare function
|
|
4
|
-
|
|
5
|
-
Implementation: import("@webiny/di").Constructor<Permissions<S>> & {
|
|
6
|
-
__abstraction: import("@webiny/di").Abstraction<Permissions<S>>;
|
|
7
|
-
};
|
|
8
|
-
};
|
|
4
|
+
export declare function createPermissionsAbstraction<const S extends PermissionSchemaConfig>(schema: S): Abstraction<Permissions<S>>;
|
|
5
|
+
export declare function createPermissionsFeature<const S extends PermissionSchemaConfig>(schema: S, abstraction: Abstraction<Permissions<S>>): import("@webiny/feature/api/createFeature.js").FeatureDefinition<unknown>;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { createAbstraction } from "@webiny/feature/api";
|
|
2
|
+
import { createFeature } from "@webiny/feature/api";
|
|
2
3
|
import { IdentityContext } from "../IdentityContext/index.js";
|
|
3
4
|
function buildEntityMap(schema) {
|
|
4
5
|
const map = new Map();
|
|
@@ -22,219 +23,228 @@ function getEntity(entityMap, entityId) {
|
|
|
22
23
|
}
|
|
23
24
|
return entity;
|
|
24
25
|
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
26
|
+
class SchemaPermissions {
|
|
27
|
+
constructor(schema, identityContext) {
|
|
28
|
+
this.entityMap = buildEntityMap(schema);
|
|
29
|
+
this.fullAccessName = `${schema.prefix}.*`;
|
|
30
|
+
this.identityContext = identityContext;
|
|
31
|
+
}
|
|
32
|
+
async canAccess(entityId, item) {
|
|
33
|
+
if (await this.identityContext.hasFullAccess()) {
|
|
34
|
+
return true;
|
|
31
35
|
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
return true;
|
|
35
|
-
}
|
|
36
|
-
if (await this.hasFullSchemaAccess()) {
|
|
37
|
-
return true;
|
|
38
|
-
}
|
|
39
|
-
const entity = getEntity(entityMap, entityId);
|
|
40
|
-
const permissions = await this.getEntityPermissions(entity.permission);
|
|
41
|
-
if (!permissions.length) {
|
|
42
|
-
return false;
|
|
43
|
-
}
|
|
44
|
-
// No item — just check entity-level access.
|
|
45
|
-
if (item === undefined) {
|
|
46
|
-
return true;
|
|
47
|
-
}
|
|
48
|
-
// Item provided — if all permissions require own, verify ownership.
|
|
49
|
-
const ownOnly = !permissions.some(p => !p.own);
|
|
50
|
-
if (!ownOnly) {
|
|
51
|
-
return true;
|
|
52
|
-
}
|
|
53
|
-
const identity = this.identityContext.getIdentity();
|
|
54
|
-
return item.createdBy?.id === identity.id;
|
|
36
|
+
if (await this.hasFullSchemaAccess()) {
|
|
37
|
+
return true;
|
|
55
38
|
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
if (await this.hasFullSchemaAccess()) {
|
|
61
|
-
return false;
|
|
62
|
-
}
|
|
63
|
-
const entity = getEntity(entityMap, entityId);
|
|
64
|
-
const permissions = await this.getEntityPermissions(entity.permission);
|
|
65
|
-
if (!permissions.length) {
|
|
66
|
-
return false;
|
|
67
|
-
}
|
|
68
|
-
return !permissions.some(p => !p.own);
|
|
39
|
+
const entity = getEntity(this.entityMap, entityId);
|
|
40
|
+
const permissions = await this.getEntityPermissions(entity.permission);
|
|
41
|
+
if (!permissions.length) {
|
|
42
|
+
return false;
|
|
69
43
|
}
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
}
|
|
74
|
-
if (await this.hasFullSchemaAccess()) {
|
|
75
|
-
return true;
|
|
76
|
-
}
|
|
77
|
-
const entity = getEntity(entityMap, entityId);
|
|
78
|
-
const permissions = await this.getEntityPermissions(entity.permission);
|
|
79
|
-
if (!permissions.length) {
|
|
80
|
-
return false;
|
|
81
|
-
}
|
|
82
|
-
return permissions.some(permission => {
|
|
83
|
-
if (typeof permission.rwd !== "string") {
|
|
84
|
-
return true;
|
|
85
|
-
}
|
|
86
|
-
return permission.rwd.includes("r");
|
|
87
|
-
});
|
|
44
|
+
// No item — just check entity-level access.
|
|
45
|
+
if (item === undefined) {
|
|
46
|
+
return true;
|
|
88
47
|
}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
if (await this.hasFullSchemaAccess()) {
|
|
94
|
-
return true;
|
|
95
|
-
}
|
|
96
|
-
const entity = getEntity(entityMap, entityId);
|
|
97
|
-
const permissions = await this.getEntityPermissions(entity.permission);
|
|
98
|
-
if (!permissions.length) {
|
|
99
|
-
return false;
|
|
100
|
-
}
|
|
101
|
-
return permissions.some(permission => {
|
|
102
|
-
if (typeof permission.rwd !== "string") {
|
|
103
|
-
return true;
|
|
104
|
-
}
|
|
105
|
-
return permission.rwd.includes("w");
|
|
106
|
-
});
|
|
48
|
+
// Item provided — if all permissions require own, verify ownership.
|
|
49
|
+
const ownOnly = !permissions.some(p => !p.own);
|
|
50
|
+
if (!ownOnly) {
|
|
51
|
+
return true;
|
|
107
52
|
}
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
return
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
}
|
|
132
|
-
return permission.rwd.includes("w");
|
|
133
|
-
});
|
|
53
|
+
const identity = this.identityContext.getIdentity();
|
|
54
|
+
return item.createdBy?.id === identity.id;
|
|
55
|
+
}
|
|
56
|
+
async onlyOwnRecords(entityId) {
|
|
57
|
+
if (await this.identityContext.hasFullAccess()) {
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
if (await this.hasFullSchemaAccess()) {
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
const entity = getEntity(this.entityMap, entityId);
|
|
64
|
+
const permissions = await this.getEntityPermissions(entity.permission);
|
|
65
|
+
if (!permissions.length) {
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
return !permissions.some(p => !p.own);
|
|
69
|
+
}
|
|
70
|
+
async canRead(entityId) {
|
|
71
|
+
if (await this.identityContext.hasFullAccess()) {
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
74
|
+
if (await this.hasFullSchemaAccess()) {
|
|
75
|
+
return true;
|
|
134
76
|
}
|
|
135
|
-
|
|
136
|
-
|
|
77
|
+
const entity = getEntity(this.entityMap, entityId);
|
|
78
|
+
const permissions = await this.getEntityPermissions(entity.permission);
|
|
79
|
+
if (!permissions.length) {
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
return permissions.some(permission => {
|
|
83
|
+
if (typeof permission.rwd !== "string") {
|
|
137
84
|
return true;
|
|
138
85
|
}
|
|
139
|
-
|
|
86
|
+
return permission.rwd.includes("r");
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
async canCreate(entityId) {
|
|
90
|
+
if (await this.identityContext.hasFullAccess()) {
|
|
91
|
+
return true;
|
|
92
|
+
}
|
|
93
|
+
if (await this.hasFullSchemaAccess()) {
|
|
94
|
+
return true;
|
|
95
|
+
}
|
|
96
|
+
const entity = getEntity(this.entityMap, entityId);
|
|
97
|
+
const permissions = await this.getEntityPermissions(entity.permission);
|
|
98
|
+
if (!permissions.length) {
|
|
99
|
+
return false;
|
|
100
|
+
}
|
|
101
|
+
return permissions.some(permission => {
|
|
102
|
+
if (typeof permission.rwd !== "string") {
|
|
140
103
|
return true;
|
|
141
104
|
}
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
105
|
+
return permission.rwd.includes("w");
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
async canEdit(entityId, item) {
|
|
109
|
+
if (await this.identityContext.hasFullAccess()) {
|
|
110
|
+
return true;
|
|
111
|
+
}
|
|
112
|
+
if (await this.hasFullSchemaAccess()) {
|
|
113
|
+
return true;
|
|
114
|
+
}
|
|
115
|
+
const entity = getEntity(this.entityMap, entityId);
|
|
116
|
+
const permissions = await this.getEntityPermissions(entity.permission);
|
|
117
|
+
if (!permissions.length) {
|
|
118
|
+
return false;
|
|
119
|
+
}
|
|
120
|
+
const identity = this.identityContext.getIdentity();
|
|
121
|
+
return permissions.some(permission => {
|
|
122
|
+
if (permission.own) {
|
|
123
|
+
// No item provided (new/unsaved) — allow access.
|
|
124
|
+
if (!item?.createdBy) {
|
|
153
125
|
return true;
|
|
154
126
|
}
|
|
155
|
-
return
|
|
156
|
-
});
|
|
157
|
-
}
|
|
158
|
-
async canPublish(entityId) {
|
|
159
|
-
if (await this.identityContext.hasFullAccess()) {
|
|
160
|
-
return true;
|
|
127
|
+
return item.createdBy.id === identity.id;
|
|
161
128
|
}
|
|
162
|
-
if (
|
|
129
|
+
if (typeof permission.rwd !== "string") {
|
|
163
130
|
return true;
|
|
164
131
|
}
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
return
|
|
171
|
-
return permission.pw?.includes("p");
|
|
172
|
-
});
|
|
132
|
+
return permission.rwd.includes("w");
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
async canDelete(entityId, item) {
|
|
136
|
+
if (await this.identityContext.hasFullAccess()) {
|
|
137
|
+
return true;
|
|
173
138
|
}
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
return true;
|
|
177
|
-
}
|
|
178
|
-
if (await this.hasFullSchemaAccess()) {
|
|
179
|
-
return true;
|
|
180
|
-
}
|
|
181
|
-
const entity = getEntity(entityMap, entityId);
|
|
182
|
-
const permissions = await this.getEntityPermissions(entity.permission);
|
|
183
|
-
if (!permissions.length) {
|
|
184
|
-
return false;
|
|
185
|
-
}
|
|
186
|
-
return permissions.some(permission => {
|
|
187
|
-
return permission.pw?.includes("u");
|
|
188
|
-
});
|
|
139
|
+
if (await this.hasFullSchemaAccess()) {
|
|
140
|
+
return true;
|
|
189
141
|
}
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
142
|
+
const entity = getEntity(this.entityMap, entityId);
|
|
143
|
+
const permissions = await this.getEntityPermissions(entity.permission);
|
|
144
|
+
if (!permissions.length) {
|
|
145
|
+
return false;
|
|
146
|
+
}
|
|
147
|
+
const identity = this.identityContext.getIdentity();
|
|
148
|
+
return permissions.some(permission => {
|
|
149
|
+
if (permission.own) {
|
|
150
|
+
return item?.createdBy?.id === identity.id;
|
|
193
151
|
}
|
|
194
|
-
if (
|
|
152
|
+
if (typeof permission.rwd !== "string") {
|
|
195
153
|
return true;
|
|
196
154
|
}
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
return
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
return
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
155
|
+
return permission.rwd.includes("d");
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
async canPublish(entityId) {
|
|
159
|
+
if (await this.identityContext.hasFullAccess()) {
|
|
160
|
+
return true;
|
|
161
|
+
}
|
|
162
|
+
if (await this.hasFullSchemaAccess()) {
|
|
163
|
+
return true;
|
|
164
|
+
}
|
|
165
|
+
const entity = getEntity(this.entityMap, entityId);
|
|
166
|
+
const permissions = await this.getEntityPermissions(entity.permission);
|
|
167
|
+
if (!permissions.length) {
|
|
168
|
+
return false;
|
|
169
|
+
}
|
|
170
|
+
return permissions.some(permission => {
|
|
171
|
+
return permission.pw?.includes("p");
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
async canUnpublish(entityId) {
|
|
175
|
+
if (await this.identityContext.hasFullAccess()) {
|
|
176
|
+
return true;
|
|
177
|
+
}
|
|
178
|
+
if (await this.hasFullSchemaAccess()) {
|
|
179
|
+
return true;
|
|
180
|
+
}
|
|
181
|
+
const entity = getEntity(this.entityMap, entityId);
|
|
182
|
+
const permissions = await this.getEntityPermissions(entity.permission);
|
|
183
|
+
if (!permissions.length) {
|
|
184
|
+
return false;
|
|
185
|
+
}
|
|
186
|
+
return permissions.some(permission => {
|
|
187
|
+
return permission.pw?.includes("u");
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
async canAction(action, entityId) {
|
|
191
|
+
if (await this.identityContext.hasFullAccess()) {
|
|
192
|
+
return true;
|
|
193
|
+
}
|
|
194
|
+
if (await this.hasFullSchemaAccess()) {
|
|
195
|
+
return true;
|
|
196
|
+
}
|
|
197
|
+
const entity = getEntity(this.entityMap, entityId);
|
|
198
|
+
const permissions = await this.getEntityPermissions(entity.permission);
|
|
199
|
+
if (!permissions.length) {
|
|
200
|
+
return false;
|
|
201
|
+
}
|
|
202
|
+
return permissions.some(permission => {
|
|
203
|
+
return permission[action] === true;
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
async getEntityPermissions(entityPermission) {
|
|
207
|
+
const permissions = await this.identityContext.getPermissions(entityPermission);
|
|
208
|
+
if (permissions.length) {
|
|
209
|
+
return permissions;
|
|
210
|
+
}
|
|
211
|
+
// Fall back to the schema wildcard (e.g. "test.*") — its flags apply to all entities.
|
|
212
|
+
const wildcard = await this.identityContext.getPermission(this.fullAccessName);
|
|
213
|
+
return wildcard ? [wildcard] : [];
|
|
214
|
+
}
|
|
215
|
+
async hasFullSchemaAccess() {
|
|
216
|
+
const permission = await this.identityContext.getPermission(this.fullAccessName);
|
|
217
|
+
if (!permission) {
|
|
218
|
+
return false;
|
|
219
|
+
}
|
|
220
|
+
// Only treat as full access if the permission has no `rwd` flag.
|
|
221
|
+
// A permission like { name: "wb.*", rwd: "r" } should NOT grant full access.
|
|
222
|
+
const keys = Object.keys(permission).filter(k => k !== "name");
|
|
223
|
+
const hasRwd = keys.includes("rwd");
|
|
224
224
|
|
|
225
|
-
|
|
226
|
-
|
|
225
|
+
// It's full-access only if there's no `rwd` flag.
|
|
226
|
+
return !hasRwd;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
export function createPermissionsAbstraction(schema) {
|
|
230
|
+
return createAbstraction(`${schema.prefix}:Permissions`);
|
|
231
|
+
}
|
|
232
|
+
export function createPermissionsFeature(schema, abstraction) {
|
|
233
|
+
class PermissionsImpl extends SchemaPermissions {
|
|
234
|
+
constructor(identityContext) {
|
|
235
|
+
super(schema, identityContext);
|
|
227
236
|
}
|
|
228
237
|
}
|
|
229
|
-
const
|
|
230
|
-
|
|
231
|
-
implementation: SchemaPermissions,
|
|
238
|
+
const Implementation = abstraction.createImplementation({
|
|
239
|
+
implementation: PermissionsImpl,
|
|
232
240
|
dependencies: [IdentityContext]
|
|
233
241
|
});
|
|
234
|
-
return {
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
242
|
+
return createFeature({
|
|
243
|
+
name: `${schema.prefix}:Permissions`,
|
|
244
|
+
register(container) {
|
|
245
|
+
container.register(Implementation);
|
|
246
|
+
}
|
|
247
|
+
});
|
|
238
248
|
}
|
|
239
249
|
|
|
240
250
|
//# sourceMappingURL=createPermissions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createAbstraction","IdentityContext","buildEntityMap","schema","map","Map","entity","entities","actions","Set","action","add","name","set","id","permission","hasOwn","scopes","includes","getEntity","entityMap","entityId","get","Error","createPermissions","fullAccessName","prefix","SchemaPermissions","constructor","identityContext","canAccess","item","hasFullAccess","hasFullSchemaAccess","permissions","getEntityPermissions","length","undefined","ownOnly","some","p","own","identity","getIdentity","createdBy","onlyOwnRecords","canRead","rwd","canCreate","canEdit","canDelete","canPublish","pw","canUnpublish","canAction","entityPermission","getPermissions","wildcard","getPermission","keys","Object","filter","k","hasRwd","Abstraction","Implementation","createImplementation","implementation","dependencies"],"sources":["createPermissions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport { IdentityContext } from \"~/features/security/IdentityContext/index.js\";\nimport type { PermissionSchemaConfig } from \"./types.js\";\nimport type { OwnableItem } from \"./types.js\";\nimport type { Permissions } from \"./types.js\";\n\ninterface EntityLookup {\n permission: string;\n actions: Set<string>;\n hasOwn: boolean;\n}\n\nfunction buildEntityMap(schema: PermissionSchemaConfig): Map<string, EntityLookup> {\n const map = new Map<string, EntityLookup>();\n for (const entity of schema.entities ?? []) {\n const actions = new Set<string>();\n for (const action of entity.actions ?? []) {\n actions.add(action.name);\n }\n map.set(entity.id, {\n permission: entity.permission,\n actions,\n hasOwn: entity.scopes.includes(\"own\")\n });\n }\n return map;\n}\n\nfunction getEntity(entityMap: Map<string, EntityLookup>, entityId: string): EntityLookup {\n const entity = entityMap.get(entityId);\n if (!entity) {\n throw new Error(`Unknown entity \"${entityId}\" in permission schema.`);\n }\n return entity;\n}\n\nexport function createPermissions<const S extends PermissionSchemaConfig>(schema: S) {\n const entityMap = buildEntityMap(schema);\n const fullAccessName = `${schema.prefix}.*`;\n\n class SchemaPermissions {\n constructor(private identityContext: IdentityContext.Interface) {}\n\n async canAccess(entityId: string, item?: OwnableItem): Promise<boolean> {\n if (await this.identityContext.hasFullAccess()) {\n return true;\n }\n if (await this.hasFullSchemaAccess()) {\n return true;\n }\n const entity = getEntity(entityMap, entityId);\n const permissions = await this.getEntityPermissions(entity.permission);\n if (!permissions.length) {\n return false;\n }\n // No item — just check entity-level access.\n if (item === undefined) {\n return true;\n }\n // Item provided — if all permissions require own, verify ownership.\n const ownOnly = !permissions.some(p => !p.own);\n if (!ownOnly) {\n return true;\n }\n const identity = this.identityContext.getIdentity();\n return item.createdBy?.id === identity.id;\n }\n\n async onlyOwnRecords(entityId: string): Promise<boolean> {\n if (await this.identityContext.hasFullAccess()) {\n return false;\n }\n if (await this.hasFullSchemaAccess()) {\n return false;\n }\n const entity = getEntity(entityMap, entityId);\n const permissions = await this.getEntityPermissions(entity.permission);\n if (!permissions.length) {\n return false;\n }\n return !permissions.some(p => !p.own);\n }\n\n async canRead(entityId: string): Promise<boolean> {\n if (await this.identityContext.hasFullAccess()) {\n return true;\n }\n if (await this.hasFullSchemaAccess()) {\n return true;\n }\n const entity = getEntity(entityMap, entityId);\n const permissions = await this.getEntityPermissions(entity.permission);\n if (!permissions.length) {\n return false;\n }\n return permissions.some(permission => {\n if (typeof permission.rwd !== \"string\") {\n return true;\n }\n return permission.rwd.includes(\"r\");\n });\n }\n\n async canCreate(entityId: string): Promise<boolean> {\n if (await this.identityContext.hasFullAccess()) {\n return true;\n }\n if (await this.hasFullSchemaAccess()) {\n return true;\n }\n const entity = getEntity(entityMap, entityId);\n const permissions = await this.getEntityPermissions(entity.permission);\n if (!permissions.length) {\n return false;\n }\n return permissions.some(permission => {\n if (typeof permission.rwd !== \"string\") {\n return true;\n }\n return permission.rwd.includes(\"w\");\n });\n }\n\n async canEdit(entityId: string, item?: OwnableItem): Promise<boolean> {\n if (await this.identityContext.hasFullAccess()) {\n return true;\n }\n if (await this.hasFullSchemaAccess()) {\n return true;\n }\n const entity = getEntity(entityMap, entityId);\n const permissions = await this.getEntityPermissions(entity.permission);\n if (!permissions.length) {\n return false;\n }\n const identity = this.identityContext.getIdentity();\n return permissions.some(permission => {\n if (permission.own) {\n // No item provided (new/unsaved) — allow access.\n if (!item?.createdBy) {\n return true;\n }\n return item.createdBy.id === identity.id;\n }\n if (typeof permission.rwd !== \"string\") {\n return true;\n }\n return permission.rwd.includes(\"w\");\n });\n }\n\n async canDelete(entityId: string, item?: OwnableItem): Promise<boolean> {\n if (await this.identityContext.hasFullAccess()) {\n return true;\n }\n if (await this.hasFullSchemaAccess()) {\n return true;\n }\n const entity = getEntity(entityMap, entityId);\n const permissions = await this.getEntityPermissions(entity.permission);\n if (!permissions.length) {\n return false;\n }\n const identity = this.identityContext.getIdentity();\n return permissions.some(permission => {\n if (permission.own) {\n return item?.createdBy?.id === identity.id;\n }\n if (typeof permission.rwd !== \"string\") {\n return true;\n }\n return permission.rwd.includes(\"d\");\n });\n }\n\n async canPublish(entityId: string): Promise<boolean> {\n if (await this.identityContext.hasFullAccess()) {\n return true;\n }\n if (await this.hasFullSchemaAccess()) {\n return true;\n }\n const entity = getEntity(entityMap, entityId);\n const permissions = await this.getEntityPermissions(entity.permission);\n if (!permissions.length) {\n return false;\n }\n return permissions.some(permission => {\n return permission.pw?.includes(\"p\");\n });\n }\n\n async canUnpublish(entityId: string): Promise<boolean> {\n if (await this.identityContext.hasFullAccess()) {\n return true;\n }\n if (await this.hasFullSchemaAccess()) {\n return true;\n }\n const entity = getEntity(entityMap, entityId);\n const permissions = await this.getEntityPermissions(entity.permission);\n if (!permissions.length) {\n return false;\n }\n return permissions.some(permission => {\n return permission.pw?.includes(\"u\");\n });\n }\n\n async canAction(action: string, entityId: string): Promise<boolean> {\n if (await this.identityContext.hasFullAccess()) {\n return true;\n }\n if (await this.hasFullSchemaAccess()) {\n return true;\n }\n const entity = getEntity(entityMap, entityId);\n const permissions = await this.getEntityPermissions(entity.permission);\n if (!permissions.length) {\n return false;\n }\n return permissions.some(permission => {\n return permission[action] === true;\n });\n }\n\n private async getEntityPermissions(entityPermission: string): Promise<any[]> {\n const permissions = await this.identityContext.getPermissions(entityPermission);\n if (permissions.length) {\n return permissions;\n }\n // Fall back to the schema wildcard (e.g. \"test.*\") — its flags apply to all entities.\n const wildcard = await this.identityContext.getPermission(fullAccessName);\n return wildcard ? [wildcard] : [];\n }\n\n private async hasFullSchemaAccess(): Promise<boolean> {\n const permission = await this.identityContext.getPermission(fullAccessName);\n if (!permission) {\n return false;\n }\n // Only treat as full access if the permission has no `rwd` flag.\n // A permission like { name: \"wb.*\", rwd: \"r\" } should NOT grant full access.\n const keys = Object.keys(permission).filter(k => k !== \"name\");\n\n const hasRwd = keys.includes(\"rwd\");\n\n // It's full-access only if there's no `rwd` flag.\n return !hasRwd;\n }\n }\n\n const Abstraction = createAbstraction<Permissions<S>>(`${schema.prefix}:Permissions`);\n\n const Implementation = Abstraction.createImplementation({\n implementation: SchemaPermissions,\n dependencies: [IdentityContext]\n } as any);\n\n return { Abstraction, Implementation };\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["createAbstraction","createFeature","IdentityContext","buildEntityMap","schema","map","Map","entity","entities","actions","Set","action","add","name","set","id","permission","hasOwn","scopes","includes","getEntity","entityMap","entityId","get","Error","SchemaPermissions","constructor","identityContext","fullAccessName","prefix","canAccess","item","hasFullAccess","hasFullSchemaAccess","permissions","getEntityPermissions","length","undefined","ownOnly","some","p","own","identity","getIdentity","createdBy","onlyOwnRecords","canRead","rwd","canCreate","canEdit","canDelete","canPublish","pw","canUnpublish","canAction","entityPermission","getPermissions","wildcard","getPermission","keys","Object","filter","k","hasRwd","createPermissionsAbstraction","createPermissionsFeature","abstraction","PermissionsImpl","Implementation","createImplementation","implementation","dependencies","register","container"],"sources":["createPermissions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport { createFeature } from \"@webiny/feature/api\";\nimport { IdentityContext } from \"~/features/security/IdentityContext/index.js\";\nimport type { Abstraction } from \"@webiny/di\";\nimport type { PermissionSchemaConfig } from \"./types.js\";\nimport type { OwnableItem } from \"./types.js\";\nimport type { Permissions } from \"./types.js\";\n\ninterface EntityLookup {\n permission: string;\n actions: Set<string>;\n hasOwn: boolean;\n}\n\nfunction buildEntityMap(schema: PermissionSchemaConfig): Map<string, EntityLookup> {\n const map = new Map<string, EntityLookup>();\n for (const entity of schema.entities ?? []) {\n const actions = new Set<string>();\n for (const action of entity.actions ?? []) {\n actions.add(action.name);\n }\n map.set(entity.id, {\n permission: entity.permission,\n actions,\n hasOwn: entity.scopes.includes(\"own\")\n });\n }\n return map;\n}\n\nfunction getEntity(entityMap: Map<string, EntityLookup>, entityId: string): EntityLookup {\n const entity = entityMap.get(entityId);\n if (!entity) {\n throw new Error(`Unknown entity \"${entityId}\" in permission schema.`);\n }\n return entity;\n}\n\nclass SchemaPermissions<S extends PermissionSchemaConfig> {\n private readonly entityMap: Map<string, EntityLookup>;\n private readonly fullAccessName: string;\n private readonly identityContext: IdentityContext.Interface;\n\n constructor(schema: S, identityContext: IdentityContext.Interface) {\n this.entityMap = buildEntityMap(schema);\n this.fullAccessName = `${schema.prefix}.*`;\n this.identityContext = identityContext;\n }\n\n async canAccess(entityId: string, item?: OwnableItem): Promise<boolean> {\n if (await this.identityContext.hasFullAccess()) {\n return true;\n }\n if (await this.hasFullSchemaAccess()) {\n return true;\n }\n const entity = getEntity(this.entityMap, entityId);\n const permissions = await this.getEntityPermissions(entity.permission);\n if (!permissions.length) {\n return false;\n }\n // No item — just check entity-level access.\n if (item === undefined) {\n return true;\n }\n // Item provided — if all permissions require own, verify ownership.\n const ownOnly = !permissions.some(p => !p.own);\n if (!ownOnly) {\n return true;\n }\n const identity = this.identityContext.getIdentity();\n return item.createdBy?.id === identity.id;\n }\n\n async onlyOwnRecords(entityId: string): Promise<boolean> {\n if (await this.identityContext.hasFullAccess()) {\n return false;\n }\n if (await this.hasFullSchemaAccess()) {\n return false;\n }\n const entity = getEntity(this.entityMap, entityId);\n const permissions = await this.getEntityPermissions(entity.permission);\n if (!permissions.length) {\n return false;\n }\n return !permissions.some(p => !p.own);\n }\n\n async canRead(entityId: string): Promise<boolean> {\n if (await this.identityContext.hasFullAccess()) {\n return true;\n }\n if (await this.hasFullSchemaAccess()) {\n return true;\n }\n const entity = getEntity(this.entityMap, entityId);\n const permissions = await this.getEntityPermissions(entity.permission);\n if (!permissions.length) {\n return false;\n }\n return permissions.some(permission => {\n if (typeof permission.rwd !== \"string\") {\n return true;\n }\n return permission.rwd.includes(\"r\");\n });\n }\n\n async canCreate(entityId: string): Promise<boolean> {\n if (await this.identityContext.hasFullAccess()) {\n return true;\n }\n if (await this.hasFullSchemaAccess()) {\n return true;\n }\n const entity = getEntity(this.entityMap, entityId);\n const permissions = await this.getEntityPermissions(entity.permission);\n if (!permissions.length) {\n return false;\n }\n return permissions.some(permission => {\n if (typeof permission.rwd !== \"string\") {\n return true;\n }\n return permission.rwd.includes(\"w\");\n });\n }\n\n async canEdit(entityId: string, item?: OwnableItem): Promise<boolean> {\n if (await this.identityContext.hasFullAccess()) {\n return true;\n }\n if (await this.hasFullSchemaAccess()) {\n return true;\n }\n const entity = getEntity(this.entityMap, entityId);\n const permissions = await this.getEntityPermissions(entity.permission);\n if (!permissions.length) {\n return false;\n }\n const identity = this.identityContext.getIdentity();\n return permissions.some(permission => {\n if (permission.own) {\n // No item provided (new/unsaved) — allow access.\n if (!item?.createdBy) {\n return true;\n }\n return item.createdBy.id === identity.id;\n }\n if (typeof permission.rwd !== \"string\") {\n return true;\n }\n return permission.rwd.includes(\"w\");\n });\n }\n\n async canDelete(entityId: string, item?: OwnableItem): Promise<boolean> {\n if (await this.identityContext.hasFullAccess()) {\n return true;\n }\n if (await this.hasFullSchemaAccess()) {\n return true;\n }\n const entity = getEntity(this.entityMap, entityId);\n const permissions = await this.getEntityPermissions(entity.permission);\n if (!permissions.length) {\n return false;\n }\n const identity = this.identityContext.getIdentity();\n return permissions.some(permission => {\n if (permission.own) {\n return item?.createdBy?.id === identity.id;\n }\n if (typeof permission.rwd !== \"string\") {\n return true;\n }\n return permission.rwd.includes(\"d\");\n });\n }\n\n async canPublish(entityId: string): Promise<boolean> {\n if (await this.identityContext.hasFullAccess()) {\n return true;\n }\n if (await this.hasFullSchemaAccess()) {\n return true;\n }\n const entity = getEntity(this.entityMap, entityId);\n const permissions = await this.getEntityPermissions(entity.permission);\n if (!permissions.length) {\n return false;\n }\n return permissions.some(permission => {\n return permission.pw?.includes(\"p\");\n });\n }\n\n async canUnpublish(entityId: string): Promise<boolean> {\n if (await this.identityContext.hasFullAccess()) {\n return true;\n }\n if (await this.hasFullSchemaAccess()) {\n return true;\n }\n const entity = getEntity(this.entityMap, entityId);\n const permissions = await this.getEntityPermissions(entity.permission);\n if (!permissions.length) {\n return false;\n }\n return permissions.some(permission => {\n return permission.pw?.includes(\"u\");\n });\n }\n\n async canAction(action: string, entityId: string): Promise<boolean> {\n if (await this.identityContext.hasFullAccess()) {\n return true;\n }\n if (await this.hasFullSchemaAccess()) {\n return true;\n }\n const entity = getEntity(this.entityMap, entityId);\n const permissions = await this.getEntityPermissions(entity.permission);\n if (!permissions.length) {\n return false;\n }\n return permissions.some(permission => {\n return permission[action] === true;\n });\n }\n\n private async getEntityPermissions(entityPermission: string): Promise<any[]> {\n const permissions = await this.identityContext.getPermissions(entityPermission);\n if (permissions.length) {\n return permissions;\n }\n // Fall back to the schema wildcard (e.g. \"test.*\") — its flags apply to all entities.\n const wildcard = await this.identityContext.getPermission(this.fullAccessName);\n return wildcard ? [wildcard] : [];\n }\n\n private async hasFullSchemaAccess(): Promise<boolean> {\n const permission = await this.identityContext.getPermission(this.fullAccessName);\n if (!permission) {\n return false;\n }\n // Only treat as full access if the permission has no `rwd` flag.\n // A permission like { name: \"wb.*\", rwd: \"r\" } should NOT grant full access.\n const keys = Object.keys(permission).filter(k => k !== \"name\");\n\n const hasRwd = keys.includes(\"rwd\");\n\n // It's full-access only if there's no `rwd` flag.\n return !hasRwd;\n }\n}\n\nexport function createPermissionsAbstraction<const S extends PermissionSchemaConfig>(schema: S) {\n return createAbstraction<Permissions<S>>(`${schema.prefix}:Permissions`);\n}\n\nexport function createPermissionsFeature<const S extends PermissionSchemaConfig>(\n schema: S,\n abstraction: Abstraction<Permissions<S>>\n) {\n class PermissionsImpl extends SchemaPermissions<S> {\n constructor(identityContext: IdentityContext.Interface) {\n super(schema, identityContext);\n }\n }\n\n const Implementation = abstraction.createImplementation({\n implementation: PermissionsImpl,\n dependencies: [IdentityContext]\n } as any);\n\n return createFeature({\n name: `${schema.prefix}:Permissions`,\n register(container) {\n container.register(Implementation);\n }\n });\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { createPermissionSchema } from "./createPermissionSchema.js";
|
|
2
|
+
export { createPermissionsAbstraction, createPermissionsFeature } from "./createPermissions.js";
|
|
2
3
|
export type { ActionDefinition, EntityDefinition, PermissionSchemaConfig, OwnableItem, Permissions, AllEntityIds, RwdEntityId, PwEntityId, CustomActionNames } from "./types.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["createPermissionSchema","createPermissionsAbstraction","createPermissionsFeature"],"sources":["index.ts"],"sourcesContent":["export { createPermissionSchema } from \"./createPermissionSchema.js\";\nexport { createPermissionsAbstraction, createPermissionsFeature } from \"./createPermissions.js\";\nexport type {\n ActionDefinition,\n EntityDefinition,\n PermissionSchemaConfig,\n OwnableItem,\n Permissions,\n AllEntityIds,\n RwdEntityId,\n PwEntityId,\n CustomActionNames\n} from \"./types.js\";\n"],"mappings":"AAAA,SAASA,sBAAsB;AAC/B,SAASC,4BAA4B,EAAEC,wBAAwB","ignoreList":[]}
|
|
@@ -35,7 +35,7 @@ class WcpContextWithFeatureFlagsDecoratorImpl {
|
|
|
35
35
|
teams: flags.isTeamsEnabled() ? project.package.features.advancedAccessControlLayer.options.teams : false,
|
|
36
36
|
privateFiles: flags.isPrivateFilesEnabled() ? project.package.features.advancedAccessControlLayer.options.privateFiles : false,
|
|
37
37
|
folderLevelPermissions: flags.isFolderLevelPermissionsEnabled() ? project.package.features.advancedAccessControlLayer.options.folderLevelPermissions : false,
|
|
38
|
-
hcmsFieldPermissions: project.package.features.advancedAccessControlLayer.options.hcmsFieldPermissions
|
|
38
|
+
hcmsFieldPermissions: flags.isHcmsFieldPermissionsEnabled() ? project.package.features.advancedAccessControlLayer.options.hcmsFieldPermissions : false
|
|
39
39
|
}
|
|
40
40
|
},
|
|
41
41
|
auditLogs: {
|
|
@@ -91,7 +91,7 @@ class WcpContextWithFeatureFlagsDecoratorImpl {
|
|
|
91
91
|
return this.decoratee.canUseWorkflows() && this.featureFlags.get().isWorkflowsEnabled();
|
|
92
92
|
}
|
|
93
93
|
canUseHcmsFieldPermissions() {
|
|
94
|
-
return this.decoratee.canUseHcmsFieldPermissions();
|
|
94
|
+
return this.decoratee.canUseHcmsFieldPermissions() && this.featureFlags.get().isHcmsFieldPermissionsEnabled();
|
|
95
95
|
}
|
|
96
96
|
ensureCanUseFeature(featureId) {
|
|
97
97
|
return this.decoratee.ensureCanUseFeature(featureId);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["WcpContext","FeatureFlags","WcpContextWithFeatureFlagsDecoratorImpl","constructor","featureFlags","decoratee","getRawLicense","getProject","getProjectWithFeatureFlags","project","flags","get","package","features","multiTenancy","advancedPublishingWorkflow","enabled","isWorkflowsEnabled","advancedAccessControlLayer","isAaclEnabled","options","teams","isTeamsEnabled","privateFiles","isPrivateFilesEnabled","folderLevelPermissions","isFolderLevelPermissionsEnabled","hcmsFieldPermissions","auditLogs","isAuditLogsEnabled","recordLocking","isRecordLockingEnabled","fileManager","threatDetection","isFileManagerThreatDetectionEnabled","getProjectEnvironment","getProjectLicense","canUseFeature","wcpFeatureId","canUseAacl","canUseTeams","canUseFolderLevelPermissions","canUsePrivateFiles","canUseAuditLogs","canUseRecordLocking","canUseFileManagerThreatDetection","canUseWorkflows","canUseHcmsFieldPermissions","ensureCanUseFeature","featureId","incrementSeats","decrementSeats","incrementTenants","decrementTenants","toDto","WcpContextWithFeatureFlagsDecorator","createDecorator","decorator","dependencies"],"sources":["WcpContextWithFeatureFlagsDecorator.ts"],"sourcesContent":["import type { WCP_FEATURE_LABEL } from \"@webiny/wcp\";\nimport { WcpContext } from \"../abstractions.js\";\nimport { FeatureFlags } from \"../../../featureFlags/abstractions.js\";\n\nclass WcpContextWithFeatureFlagsDecoratorImpl implements WcpContext.Interface {\n constructor(\n private featureFlags: FeatureFlags.Interface,\n private decoratee: WcpContext.Interface\n ) {}\n\n getRawLicense() {\n return this.decoratee.getRawLicense();\n }\n\n getProject() {\n return this.decoratee.getProject();\n }\n\n getProjectWithFeatureFlags() {\n const project = this.decoratee.getProjectWithFeatureFlags();\n if (!project) {\n return null;\n }\n\n const flags = this.featureFlags.get();\n\n return {\n ...project,\n package: {\n ...project.package,\n features: {\n ...project.package.features,\n multiTenancy: project.package.features.multiTenancy,\n advancedPublishingWorkflow: {\n ...project.package.features.advancedPublishingWorkflow,\n enabled: flags.isWorkflowsEnabled()\n ? project.package.features.advancedPublishingWorkflow.enabled\n : false\n },\n advancedAccessControlLayer: {\n ...project.package.features.advancedAccessControlLayer,\n enabled: flags.isAaclEnabled()\n ? project.package.features.advancedAccessControlLayer.enabled\n : false,\n options: {\n teams: flags.isTeamsEnabled()\n ? project.package.features.advancedAccessControlLayer.options.teams\n : false,\n privateFiles: flags.isPrivateFilesEnabled()\n ? project.package.features.advancedAccessControlLayer.options\n .privateFiles\n : false,\n folderLevelPermissions: flags.isFolderLevelPermissionsEnabled()\n ? project.package.features.advancedAccessControlLayer.options\n .folderLevelPermissions\n : false,\n hcmsFieldPermissions:\n project.package.features.advancedAccessControlLayer.options\n .hcmsFieldPermissions\n }\n },\n auditLogs: {\n ...project.package.features.auditLogs,\n enabled: flags.isAuditLogsEnabled()\n ? project.package.features.auditLogs.enabled\n : false\n },\n recordLocking: {\n ...project.package.features.recordLocking,\n enabled: flags.isRecordLockingEnabled()\n ? project.package.features.recordLocking.enabled\n : false\n },\n fileManager: {\n ...project.package.features.fileManager,\n enabled: project.package.features.fileManager.enabled,\n options: {\n threatDetection: flags.isFileManagerThreatDetectionEnabled()\n ? project.package.features.fileManager.options.threatDetection\n : false\n }\n }\n }\n }\n };\n }\n\n getProjectEnvironment() {\n return this.decoratee.getProjectEnvironment();\n }\n\n getProjectLicense() {\n return this.decoratee.getProjectLicense();\n }\n\n canUseFeature(wcpFeatureId: keyof typeof WCP_FEATURE_LABEL) {\n return this.decoratee.canUseFeature(wcpFeatureId);\n }\n\n canUseAacl() {\n return this.decoratee.canUseAacl() && this.featureFlags.get().isAaclEnabled();\n }\n\n canUseTeams() {\n return this.decoratee.canUseTeams() && this.featureFlags.get().isTeamsEnabled();\n }\n\n canUseFolderLevelPermissions() {\n return (\n this.decoratee.canUseFolderLevelPermissions() &&\n this.featureFlags.get().isFolderLevelPermissionsEnabled()\n );\n }\n\n canUsePrivateFiles() {\n return (\n this.decoratee.canUsePrivateFiles() && this.featureFlags.get().isPrivateFilesEnabled()\n );\n }\n\n canUseAuditLogs() {\n return this.decoratee.canUseAuditLogs() && this.featureFlags.get().isAuditLogsEnabled();\n }\n\n canUseRecordLocking() {\n return (\n this.decoratee.canUseRecordLocking() && this.featureFlags.get().isRecordLockingEnabled()\n );\n }\n\n canUseFileManagerThreatDetection() {\n return (\n this.decoratee.canUseFileManagerThreatDetection() &&\n this.featureFlags.get().isFileManagerThreatDetectionEnabled()\n );\n }\n\n canUseWorkflows() {\n return this.decoratee.canUseWorkflows() && this.featureFlags.get().isWorkflowsEnabled();\n }\n\n canUseHcmsFieldPermissions() {\n return this.decoratee.canUseHcmsFieldPermissions();\n }\n\n ensureCanUseFeature(featureId: keyof typeof WCP_FEATURE_LABEL) {\n return this.decoratee.ensureCanUseFeature(featureId);\n }\n\n async incrementSeats() {\n return this.decoratee.incrementSeats();\n }\n\n async decrementSeats() {\n return this.decoratee.decrementSeats();\n }\n\n async incrementTenants() {\n return this.decoratee.incrementTenants();\n }\n\n async decrementTenants() {\n return this.decoratee.decrementTenants();\n }\n\n toDto() {\n return this.decoratee.toDto();\n }\n}\n\nexport const WcpContextWithFeatureFlagsDecorator = WcpContext.createDecorator({\n decorator: WcpContextWithFeatureFlagsDecoratorImpl,\n dependencies: [FeatureFlags]\n});\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["WcpContext","FeatureFlags","WcpContextWithFeatureFlagsDecoratorImpl","constructor","featureFlags","decoratee","getRawLicense","getProject","getProjectWithFeatureFlags","project","flags","get","package","features","multiTenancy","advancedPublishingWorkflow","enabled","isWorkflowsEnabled","advancedAccessControlLayer","isAaclEnabled","options","teams","isTeamsEnabled","privateFiles","isPrivateFilesEnabled","folderLevelPermissions","isFolderLevelPermissionsEnabled","hcmsFieldPermissions","isHcmsFieldPermissionsEnabled","auditLogs","isAuditLogsEnabled","recordLocking","isRecordLockingEnabled","fileManager","threatDetection","isFileManagerThreatDetectionEnabled","getProjectEnvironment","getProjectLicense","canUseFeature","wcpFeatureId","canUseAacl","canUseTeams","canUseFolderLevelPermissions","canUsePrivateFiles","canUseAuditLogs","canUseRecordLocking","canUseFileManagerThreatDetection","canUseWorkflows","canUseHcmsFieldPermissions","ensureCanUseFeature","featureId","incrementSeats","decrementSeats","incrementTenants","decrementTenants","toDto","WcpContextWithFeatureFlagsDecorator","createDecorator","decorator","dependencies"],"sources":["WcpContextWithFeatureFlagsDecorator.ts"],"sourcesContent":["import type { WCP_FEATURE_LABEL } from \"@webiny/wcp\";\nimport { WcpContext } from \"../abstractions.js\";\nimport { FeatureFlags } from \"../../../featureFlags/abstractions.js\";\n\nclass WcpContextWithFeatureFlagsDecoratorImpl implements WcpContext.Interface {\n constructor(\n private featureFlags: FeatureFlags.Interface,\n private decoratee: WcpContext.Interface\n ) {}\n\n getRawLicense() {\n return this.decoratee.getRawLicense();\n }\n\n getProject() {\n return this.decoratee.getProject();\n }\n\n getProjectWithFeatureFlags() {\n const project = this.decoratee.getProjectWithFeatureFlags();\n if (!project) {\n return null;\n }\n\n const flags = this.featureFlags.get();\n\n return {\n ...project,\n package: {\n ...project.package,\n features: {\n ...project.package.features,\n multiTenancy: project.package.features.multiTenancy,\n advancedPublishingWorkflow: {\n ...project.package.features.advancedPublishingWorkflow,\n enabled: flags.isWorkflowsEnabled()\n ? project.package.features.advancedPublishingWorkflow.enabled\n : false\n },\n advancedAccessControlLayer: {\n ...project.package.features.advancedAccessControlLayer,\n enabled: flags.isAaclEnabled()\n ? project.package.features.advancedAccessControlLayer.enabled\n : false,\n options: {\n teams: flags.isTeamsEnabled()\n ? project.package.features.advancedAccessControlLayer.options.teams\n : false,\n privateFiles: flags.isPrivateFilesEnabled()\n ? project.package.features.advancedAccessControlLayer.options\n .privateFiles\n : false,\n folderLevelPermissions: flags.isFolderLevelPermissionsEnabled()\n ? project.package.features.advancedAccessControlLayer.options\n .folderLevelPermissions\n : false,\n hcmsFieldPermissions: flags.isHcmsFieldPermissionsEnabled()\n ? project.package.features.advancedAccessControlLayer.options\n .hcmsFieldPermissions\n : false\n }\n },\n auditLogs: {\n ...project.package.features.auditLogs,\n enabled: flags.isAuditLogsEnabled()\n ? project.package.features.auditLogs.enabled\n : false\n },\n recordLocking: {\n ...project.package.features.recordLocking,\n enabled: flags.isRecordLockingEnabled()\n ? project.package.features.recordLocking.enabled\n : false\n },\n fileManager: {\n ...project.package.features.fileManager,\n enabled: project.package.features.fileManager.enabled,\n options: {\n threatDetection: flags.isFileManagerThreatDetectionEnabled()\n ? project.package.features.fileManager.options.threatDetection\n : false\n }\n }\n }\n }\n };\n }\n\n getProjectEnvironment() {\n return this.decoratee.getProjectEnvironment();\n }\n\n getProjectLicense() {\n return this.decoratee.getProjectLicense();\n }\n\n canUseFeature(wcpFeatureId: keyof typeof WCP_FEATURE_LABEL) {\n return this.decoratee.canUseFeature(wcpFeatureId);\n }\n\n canUseAacl() {\n return this.decoratee.canUseAacl() && this.featureFlags.get().isAaclEnabled();\n }\n\n canUseTeams() {\n return this.decoratee.canUseTeams() && this.featureFlags.get().isTeamsEnabled();\n }\n\n canUseFolderLevelPermissions() {\n return (\n this.decoratee.canUseFolderLevelPermissions() &&\n this.featureFlags.get().isFolderLevelPermissionsEnabled()\n );\n }\n\n canUsePrivateFiles() {\n return (\n this.decoratee.canUsePrivateFiles() && this.featureFlags.get().isPrivateFilesEnabled()\n );\n }\n\n canUseAuditLogs() {\n return this.decoratee.canUseAuditLogs() && this.featureFlags.get().isAuditLogsEnabled();\n }\n\n canUseRecordLocking() {\n return (\n this.decoratee.canUseRecordLocking() && this.featureFlags.get().isRecordLockingEnabled()\n );\n }\n\n canUseFileManagerThreatDetection() {\n return (\n this.decoratee.canUseFileManagerThreatDetection() &&\n this.featureFlags.get().isFileManagerThreatDetectionEnabled()\n );\n }\n\n canUseWorkflows() {\n return this.decoratee.canUseWorkflows() && this.featureFlags.get().isWorkflowsEnabled();\n }\n\n canUseHcmsFieldPermissions() {\n return (\n this.decoratee.canUseHcmsFieldPermissions() &&\n this.featureFlags.get().isHcmsFieldPermissionsEnabled()\n );\n }\n\n ensureCanUseFeature(featureId: keyof typeof WCP_FEATURE_LABEL) {\n return this.decoratee.ensureCanUseFeature(featureId);\n }\n\n async incrementSeats() {\n return this.decoratee.incrementSeats();\n }\n\n async decrementSeats() {\n return this.decoratee.decrementSeats();\n }\n\n async incrementTenants() {\n return this.decoratee.incrementTenants();\n }\n\n async decrementTenants() {\n return this.decoratee.decrementTenants();\n }\n\n toDto() {\n return this.decoratee.toDto();\n }\n}\n\nexport const WcpContextWithFeatureFlagsDecorator = WcpContext.createDecorator({\n decorator: WcpContextWithFeatureFlagsDecoratorImpl,\n dependencies: [FeatureFlags]\n});\n"],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webiny/api-core",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.2.0-beta.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"repository": {
|
|
@@ -9,89 +9,46 @@
|
|
|
9
9
|
},
|
|
10
10
|
"description": "Core package for developing API-related features. Includes tenancy, security, system, and admin users.",
|
|
11
11
|
"author": "Webiny Ltd.",
|
|
12
|
+
"license": "MIT",
|
|
12
13
|
"exports": {
|
|
13
14
|
".": "./index.js",
|
|
14
|
-
"./features/EventPublisher": "./features/eventPublisher/index.js",
|
|
15
|
-
"./features/LoggerService": "./features/logger/index.js",
|
|
16
|
-
"./features/IdentityContext": "./features/security/IdentityContext/index.js",
|
|
17
|
-
"./features/WcpContext": "./features/wcp/WcpContext/index.js",
|
|
18
|
-
"./features/TaskService": "./features/task/TaskService/index.js",
|
|
19
|
-
"./features/CreateApiKey": "./features/security/apiKeys/CreateApiKey/index.js",
|
|
20
|
-
"./features/DeleteApiKey": "./features/security/apiKeys/DeleteApiKey/index.js",
|
|
21
|
-
"./features/GetApiKey": "./features/security/apiKeys/GetApiKey/index.js",
|
|
22
|
-
"./features/GetApiKeyByToken": "./features/security/apiKeys/GetApiKeyByToken/index.js",
|
|
23
|
-
"./features/ListApiKeys": "./features/security/apiKeys/ListApiKeys/index.js",
|
|
24
|
-
"./features/UpdateApiKey": "./features/security/apiKeys/UpdateApiKey/index.js",
|
|
25
|
-
"./features/AuthenticationContext": "./features/security/authentication/AuthenticationContext/index.js",
|
|
26
|
-
"./features/Authenticator": "./features/security/authentication/Authenticator/index.js",
|
|
27
|
-
"./features/AuthorizationContext": "./features/security/authorization/AuthorizationContext/index.js",
|
|
28
|
-
"./features/Authorizer": "./features/security/authorization/Authorizer/index.js",
|
|
29
|
-
"./features/CreateRole": "./features/security/roles/CreateRole/index.js",
|
|
30
|
-
"./features/DeleteRole": "./features/security/roles/DeleteRole/index.js",
|
|
31
|
-
"./features/GetRole": "./features/security/roles/GetRole/index.js",
|
|
32
|
-
"./features/ListRoles": "./features/security/roles/ListRoles/index.js",
|
|
33
|
-
"./features/UpdateRole": "./features/security/roles/UpdateRole/index.js",
|
|
34
|
-
"./features/CreateTeam": "./features/security/teams/CreateTeam/index.js",
|
|
35
|
-
"./features/DeleteTeam": "./features/security/teams/DeleteTeam/index.js",
|
|
36
|
-
"./features/GetTeam": "./features/security/teams/GetTeam/index.js",
|
|
37
|
-
"./features/ListTeams": "./features/security/teams/ListTeams/index.js",
|
|
38
|
-
"./features/UpdateTeam": "./features/security/teams/UpdateTeam/index.js",
|
|
39
|
-
"./features/CreateTenantLinks": "./features/security/tenantLinks/CreateTenantLinks/index.js",
|
|
40
|
-
"./features/DeleteTenantLinks": "./features/security/tenantLinks/DeleteTenantLinks/index.js",
|
|
41
|
-
"./features/GetTenantLinkByIdentity": "./features/security/tenantLinks/GetTenantLinkByIdentity/index.js",
|
|
42
|
-
"./features/ListTenantLinksByIdentity": "./features/security/tenantLinks/ListTenantLinksByIdentity/index.js",
|
|
43
|
-
"./features/ListTenantLinksByTenant": "./features/security/tenantLinks/ListTenantLinksByTenant/index.js",
|
|
44
|
-
"./features/ListTenantLinksByType": "./features/security/tenantLinks/ListTenantLinksByType/index.js",
|
|
45
|
-
"./features/UpdateTenantLinks": "./features/security/tenantLinks/UpdateTenantLinks/index.js",
|
|
46
|
-
"./features/InstallSystem": "./features/system/InstallSystem/index.js",
|
|
47
|
-
"./features/InstallTenant": "./features/tenancy/InstallTenant/index.js",
|
|
48
|
-
"./features/TenantContext": "./features/tenancy/TenantContext/index.js",
|
|
49
|
-
"./features/CreateUser": "./features/users/CreateUser/index.js",
|
|
50
|
-
"./features/DeleteUser": "./features/users/DeleteUser/index.js",
|
|
51
|
-
"./features/UpdateUser": "./features/users/UpdateUser/index.js",
|
|
52
|
-
"./features/GetUser": "./features/users/GetUser/index.js",
|
|
53
|
-
"./features/ListUsers": "./features/users/ListUsers/index.js",
|
|
54
|
-
"./features/ListUserTeams": "./features/users/ListUserTeams/index.js",
|
|
55
|
-
"./features/ExternalIdpUserSync": "./features/users/ExternalIdpUserSync/index.js",
|
|
56
15
|
"./*": "./*"
|
|
57
16
|
},
|
|
58
|
-
"license": "MIT",
|
|
59
17
|
"dependencies": {
|
|
60
|
-
"@webiny/api": "6.
|
|
18
|
+
"@webiny/api": "6.2.0-beta.0",
|
|
61
19
|
"@webiny/di": "0.2.3",
|
|
62
|
-
"@webiny/error": "6.
|
|
63
|
-
"@webiny/feature": "6.
|
|
64
|
-
"@webiny/feature-flags": "6.
|
|
65
|
-
"@webiny/handler": "6.
|
|
66
|
-
"@webiny/handler-db": "6.
|
|
67
|
-
"@webiny/handler-graphql": "6.
|
|
68
|
-
"@webiny/plugins": "6.
|
|
69
|
-
"@webiny/utils": "6.
|
|
70
|
-
"@webiny/wcp": "6.
|
|
20
|
+
"@webiny/error": "6.2.0-beta.0",
|
|
21
|
+
"@webiny/feature": "6.2.0-beta.0",
|
|
22
|
+
"@webiny/feature-flags": "6.2.0-beta.0",
|
|
23
|
+
"@webiny/handler": "6.2.0-beta.0",
|
|
24
|
+
"@webiny/handler-db": "6.2.0-beta.0",
|
|
25
|
+
"@webiny/handler-graphql": "6.2.0-beta.0",
|
|
26
|
+
"@webiny/plugins": "6.2.0-beta.0",
|
|
27
|
+
"@webiny/utils": "6.2.0-beta.0",
|
|
28
|
+
"@webiny/wcp": "6.2.0-beta.0",
|
|
71
29
|
"dataloader": "2.2.3",
|
|
72
30
|
"jose": "6.2.2",
|
|
73
31
|
"jsonwebtoken": "9.0.3",
|
|
74
|
-
"lodash": "4.
|
|
75
|
-
"minimatch": "10.2.
|
|
32
|
+
"lodash": "4.18.1",
|
|
33
|
+
"minimatch": "10.2.5",
|
|
76
34
|
"pino": "10.3.1",
|
|
77
35
|
"pino-lambda": "4.4.1",
|
|
78
36
|
"zod": "4.3.6"
|
|
79
37
|
},
|
|
80
38
|
"devDependencies": {
|
|
81
39
|
"@types/jsonwebtoken": "9.0.10",
|
|
82
|
-
"@
|
|
83
|
-
"@webiny/
|
|
84
|
-
"@webiny/
|
|
85
|
-
"@webiny/
|
|
86
|
-
"@webiny/project-utils": "6.1.0-beta.3",
|
|
40
|
+
"@webiny/build-tools": "6.2.0-beta.0",
|
|
41
|
+
"@webiny/db-dynamodb": "6.2.0-beta.0",
|
|
42
|
+
"@webiny/handler-aws": "6.2.0-beta.0",
|
|
43
|
+
"@webiny/project-utils": "6.2.0-beta.0",
|
|
87
44
|
"jest-dynalite": "3.6.1",
|
|
88
45
|
"rimraf": "6.1.3",
|
|
89
46
|
"typescript": "5.9.3",
|
|
90
|
-
"vitest": "4.1.
|
|
47
|
+
"vitest": "4.1.4"
|
|
91
48
|
},
|
|
92
49
|
"publishConfig": {
|
|
93
50
|
"access": "public",
|
|
94
51
|
"directory": "dist"
|
|
95
52
|
},
|
|
96
|
-
"gitHead": "
|
|
53
|
+
"gitHead": "3d3148358b6febbc857371930871743bec3b3939"
|
|
97
54
|
}
|