@webiny/tenant-manager 0.0.0-unstable.0d717d18dd
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 +36 -0
- package/README.md +11 -0
- package/TenantManager.d.ts +2 -0
- package/TenantManager.js +11 -0
- package/TenantManager.js.map +1 -0
- package/admin/CurrentTenant/CurrentTenant.d.ts +10 -0
- package/admin/CurrentTenant/CurrentTenant.js +25 -0
- package/admin/CurrentTenant/CurrentTenant.js.map +1 -0
- package/admin/CurrentTenant/CurrentTenantGateway.d.ts +12 -0
- package/admin/CurrentTenant/CurrentTenantGateway.js +43 -0
- package/admin/CurrentTenant/CurrentTenantGateway.js.map +1 -0
- package/admin/CurrentTenant/CurrentTenantPresenter.d.ts +12 -0
- package/admin/CurrentTenant/CurrentTenantPresenter.js +33 -0
- package/admin/CurrentTenant/CurrentTenantPresenter.js.map +1 -0
- package/admin/CurrentTenant/CurrentTenantRepository.d.ts +15 -0
- package/admin/CurrentTenant/CurrentTenantRepository.js +38 -0
- package/admin/CurrentTenant/CurrentTenantRepository.js.map +1 -0
- package/admin/CurrentTenant/abstractions.d.ts +31 -0
- package/admin/CurrentTenant/abstractions.js +7 -0
- package/admin/CurrentTenant/abstractions.js.map +1 -0
- package/admin/CurrentTenant/feature.d.ts +3 -0
- package/admin/CurrentTenant/feature.js +21 -0
- package/admin/CurrentTenant/feature.js.map +1 -0
- package/admin/CurrentTenant/useCurrentTenant.d.ts +4 -0
- package/admin/CurrentTenant/useCurrentTenant.js +18 -0
- package/admin/CurrentTenant/useCurrentTenant.js.map +1 -0
- package/admin/CurrentTenantProvider.d.ts +2 -0
- package/admin/CurrentTenantProvider.js +9 -0
- package/admin/CurrentTenantProvider.js.map +1 -0
- package/admin/DisableTenant/DisableTenantGateway.d.ts +11 -0
- package/admin/DisableTenant/DisableTenantGateway.js +42 -0
- package/admin/DisableTenant/DisableTenantGateway.js.map +1 -0
- package/admin/DisableTenant/DisableTenantRepository.d.ts +12 -0
- package/admin/DisableTenant/DisableTenantRepository.js +33 -0
- package/admin/DisableTenant/DisableTenantRepository.js.map +1 -0
- package/admin/DisableTenant/DisableTenantUseCase.d.ts +10 -0
- package/admin/DisableTenant/DisableTenantUseCase.js +18 -0
- package/admin/DisableTenant/DisableTenantUseCase.js.map +1 -0
- package/admin/DisableTenant/abstractions.d.ts +21 -0
- package/admin/DisableTenant/abstractions.js +7 -0
- package/admin/DisableTenant/abstractions.js.map +1 -0
- package/admin/DisableTenant/feature.d.ts +3 -0
- package/admin/DisableTenant/feature.js +21 -0
- package/admin/DisableTenant/feature.js.map +1 -0
- package/admin/DisableTenant/index.d.ts +2 -0
- package/admin/DisableTenant/index.js +2 -0
- package/admin/DisableTenant/useDisableTenant.d.ts +4 -0
- package/admin/DisableTenant/useDisableTenant.js +18 -0
- package/admin/DisableTenant/useDisableTenant.js.map +1 -0
- package/admin/EnableTenant/EnableTenantGateway.d.ts +11 -0
- package/admin/EnableTenant/EnableTenantGateway.js +42 -0
- package/admin/EnableTenant/EnableTenantGateway.js.map +1 -0
- package/admin/EnableTenant/EnableTenantRepository.d.ts +12 -0
- package/admin/EnableTenant/EnableTenantRepository.js +33 -0
- package/admin/EnableTenant/EnableTenantRepository.js.map +1 -0
- package/admin/EnableTenant/EnableTenantUseCase.d.ts +10 -0
- package/admin/EnableTenant/EnableTenantUseCase.js +18 -0
- package/admin/EnableTenant/EnableTenantUseCase.js.map +1 -0
- package/admin/EnableTenant/abstractions.d.ts +21 -0
- package/admin/EnableTenant/abstractions.js +7 -0
- package/admin/EnableTenant/abstractions.js.map +1 -0
- package/admin/EnableTenant/feature.d.ts +3 -0
- package/admin/EnableTenant/feature.js +21 -0
- package/admin/EnableTenant/feature.js.map +1 -0
- package/admin/EnableTenant/index.d.ts +2 -0
- package/admin/EnableTenant/index.js +2 -0
- package/admin/EnableTenant/useEnableTenant.d.ts +4 -0
- package/admin/EnableTenant/useEnableTenant.js +24 -0
- package/admin/EnableTenant/useEnableTenant.js.map +1 -0
- package/admin/Extension.d.ts +2 -0
- package/admin/Extension.js +49 -0
- package/admin/Extension.js.map +1 -0
- package/admin/InstallTenant/InstallTenantGateway.d.ts +11 -0
- package/admin/InstallTenant/InstallTenantGateway.js +42 -0
- package/admin/InstallTenant/InstallTenantGateway.js.map +1 -0
- package/admin/InstallTenant/InstallTenantRepository.d.ts +12 -0
- package/admin/InstallTenant/InstallTenantRepository.js +34 -0
- package/admin/InstallTenant/InstallTenantRepository.js.map +1 -0
- package/admin/InstallTenant/InstallTenantUseCase.d.ts +10 -0
- package/admin/InstallTenant/InstallTenantUseCase.js +18 -0
- package/admin/InstallTenant/InstallTenantUseCase.js.map +1 -0
- package/admin/InstallTenant/abstractions.d.ts +21 -0
- package/admin/InstallTenant/abstractions.js +7 -0
- package/admin/InstallTenant/abstractions.js.map +1 -0
- package/admin/InstallTenant/feature.d.ts +3 -0
- package/admin/InstallTenant/feature.js +21 -0
- package/admin/InstallTenant/feature.js.map +1 -0
- package/admin/InstallTenant/index.d.ts +2 -0
- package/admin/InstallTenant/index.js +2 -0
- package/admin/InstallTenant/useInstallTenant.d.ts +4 -0
- package/admin/InstallTenant/useInstallTenant.js +24 -0
- package/admin/InstallTenant/useInstallTenant.js.map +1 -0
- package/admin/IsRootTenant.d.ts +13 -0
- package/admin/IsRootTenant.js +19 -0
- package/admin/IsRootTenant.js.map +1 -0
- package/admin/SecurityPermission.d.ts +2 -0
- package/admin/SecurityPermission.js +15 -0
- package/admin/SecurityPermission.js.map +1 -0
- package/admin/TenantEntryList/DisableTenant/useDisableTenantDialog.d.ts +8 -0
- package/admin/TenantEntryList/DisableTenant/useDisableTenantDialog.js +41 -0
- package/admin/TenantEntryList/DisableTenant/useDisableTenantDialog.js.map +1 -0
- package/admin/TenantEntryList/EnableTenant/EnableTenant.d.ts +7 -0
- package/admin/TenantEntryList/EnableTenant/EnableTenant.js +15 -0
- package/admin/TenantEntryList/EnableTenant/EnableTenant.js.map +1 -0
- package/admin/TenantEntryList/EnableTenant/useEnableTenant.d.ts +5 -0
- package/admin/TenantEntryList/EnableTenant/useEnableTenant.js +31 -0
- package/admin/TenantEntryList/EnableTenant/useEnableTenant.js.map +1 -0
- package/admin/TenantEntryList/FolderNameCell.d.ts +7 -0
- package/admin/TenantEntryList/FolderNameCell.js +24 -0
- package/admin/TenantEntryList/FolderNameCell.js.map +1 -0
- package/admin/TenantEntryList/InstallTenantButton/InstallTenant.d.ts +7 -0
- package/admin/TenantEntryList/InstallTenantButton/InstallTenant.js +15 -0
- package/admin/TenantEntryList/InstallTenantButton/InstallTenant.js.map +1 -0
- package/admin/TenantEntryList/InstallTenantButton/useInstallTenant.d.ts +5 -0
- package/admin/TenantEntryList/InstallTenantButton/useInstallTenant.js +31 -0
- package/admin/TenantEntryList/InstallTenantButton/useInstallTenant.js.map +1 -0
- package/admin/TenantEntryList/ManageTenant.d.ts +7 -0
- package/admin/TenantEntryList/ManageTenant.js +19 -0
- package/admin/TenantEntryList/ManageTenant.js.map +1 -0
- package/admin/TenantEntryList/TenantCell.d.ts +2 -0
- package/admin/TenantEntryList/TenantCell.js +24 -0
- package/admin/TenantEntryList/TenantCell.js.map +1 -0
- package/admin/TenantEntryList/TenantNameCell.d.ts +2 -0
- package/admin/TenantEntryList/TenantNameCell.js +51 -0
- package/admin/TenantEntryList/TenantNameCell.js.map +1 -0
- package/admin/TenantEntryList.d.ts +2 -0
- package/admin/TenantEntryList.js +59 -0
- package/admin/TenantEntryList.js.map +1 -0
- package/admin/TenantSelector.d.ts +2 -0
- package/admin/TenantSelector.js +35 -0
- package/admin/TenantSelector.js.map +1 -0
- package/admin/domain/permissionsSchema.d.ts +4 -0
- package/admin/domain/permissionsSchema.js +8 -0
- package/admin/domain/permissionsSchema.js.map +1 -0
- package/admin/features/permissions/abstractions.d.ts +17 -0
- package/admin/features/permissions/abstractions.js +6 -0
- package/admin/features/permissions/abstractions.js.map +1 -0
- package/admin/features/permissions/feature.d.ts +14 -0
- package/admin/features/permissions/feature.js +7 -0
- package/admin/features/permissions/feature.js.map +1 -0
- package/admin/types.d.ts +7 -0
- package/admin/types.js +0 -0
- package/api/Extension.d.ts +4 -0
- package/api/Extension.js +39 -0
- package/api/Extension.js.map +1 -0
- package/api/domain/TenantId.d.ts +3 -0
- package/api/domain/TenantId.js +10 -0
- package/api/domain/TenantId.js.map +1 -0
- package/api/domain/TenantModel.d.ts +11 -0
- package/api/domain/TenantModel.js +68 -0
- package/api/domain/TenantModel.js.map +1 -0
- package/api/domain/TenantModelExtension.d.ts +11 -0
- package/api/domain/TenantModelExtension.js +5 -0
- package/api/domain/TenantModelExtension.js.map +1 -0
- package/api/domain/errors.d.ts +33 -0
- package/api/domain/errors.js +58 -0
- package/api/domain/errors.js.map +1 -0
- package/api/features/AddCmsPermissions/AddCmsPermissions.d.ts +8 -0
- package/api/features/AddCmsPermissions/AddCmsPermissions.js +48 -0
- package/api/features/AddCmsPermissions/AddCmsPermissions.js.map +1 -0
- package/api/features/AddCmsPermissions/feature.d.ts +4 -0
- package/api/features/AddCmsPermissions/feature.js +11 -0
- package/api/features/AddCmsPermissions/feature.js.map +1 -0
- package/api/features/CreateAndInstallTenant/CreateAndInstallTenantUseCase.d.ts +24 -0
- package/api/features/CreateAndInstallTenant/CreateAndInstallTenantUseCase.js +81 -0
- package/api/features/CreateAndInstallTenant/CreateAndInstallTenantUseCase.js.map +1 -0
- package/api/features/CreateAndInstallTenant/abstractions.d.ts +26 -0
- package/api/features/CreateAndInstallTenant/abstractions.js +5 -0
- package/api/features/CreateAndInstallTenant/abstractions.js.map +1 -0
- package/api/features/CreateAndInstallTenant/feature.d.ts +4 -0
- package/api/features/CreateAndInstallTenant/feature.js +11 -0
- package/api/features/CreateAndInstallTenant/feature.js.map +1 -0
- package/api/features/CreateTenant/CreateTenantRepository.d.ts +15 -0
- package/api/features/CreateTenant/CreateTenantRepository.js +43 -0
- package/api/features/CreateTenant/CreateTenantRepository.js.map +1 -0
- package/api/features/CreateTenant/CreateTenantUseCase.d.ts +14 -0
- package/api/features/CreateTenant/CreateTenantUseCase.js +40 -0
- package/api/features/CreateTenant/CreateTenantUseCase.js.map +1 -0
- package/api/features/CreateTenant/abstractions.d.ts +41 -0
- package/api/features/CreateTenant/abstractions.js +6 -0
- package/api/features/CreateTenant/abstractions.js.map +1 -0
- package/api/features/CreateTenant/feature.d.ts +4 -0
- package/api/features/CreateTenant/feature.js +13 -0
- package/api/features/CreateTenant/feature.js.map +1 -0
- package/api/features/DeleteTenantOnEntryDelete/DeleteTenantOnEntryDeleteHandler.d.ts +11 -0
- package/api/features/DeleteTenantOnEntryDelete/DeleteTenantOnEntryDeleteHandler.js +27 -0
- package/api/features/DeleteTenantOnEntryDelete/DeleteTenantOnEntryDeleteHandler.js.map +1 -0
- package/api/features/DeleteTenantOnEntryDelete/feature.d.ts +4 -0
- package/api/features/DeleteTenantOnEntryDelete/feature.js +11 -0
- package/api/features/DeleteTenantOnEntryDelete/feature.js.map +1 -0
- package/api/features/DisableTenant/DisableTenantUseCase.d.ts +20 -0
- package/api/features/DisableTenant/DisableTenantUseCase.js +53 -0
- package/api/features/DisableTenant/DisableTenantUseCase.js.map +1 -0
- package/api/features/DisableTenant/abstractions.d.ts +19 -0
- package/api/features/DisableTenant/abstractions.js +5 -0
- package/api/features/DisableTenant/abstractions.js.map +1 -0
- package/api/features/DisableTenant/events.d.ts +27 -0
- package/api/features/DisableTenant/events.js +23 -0
- package/api/features/DisableTenant/events.js.map +1 -0
- package/api/features/DisableTenant/feature.d.ts +4 -0
- package/api/features/DisableTenant/feature.js +11 -0
- package/api/features/DisableTenant/feature.js.map +1 -0
- package/api/features/EnableTenant/EnableTenantUseCase.d.ts +20 -0
- package/api/features/EnableTenant/EnableTenantUseCase.js +55 -0
- package/api/features/EnableTenant/EnableTenantUseCase.js.map +1 -0
- package/api/features/EnableTenant/abstractions.d.ts +19 -0
- package/api/features/EnableTenant/abstractions.js +5 -0
- package/api/features/EnableTenant/abstractions.js.map +1 -0
- package/api/features/EnableTenant/events.d.ts +27 -0
- package/api/features/EnableTenant/events.js +23 -0
- package/api/features/EnableTenant/events.js.map +1 -0
- package/api/features/EnableTenant/feature.d.ts +4 -0
- package/api/features/EnableTenant/feature.js +11 -0
- package/api/features/EnableTenant/feature.js.map +1 -0
- package/api/features/GetCurrentTenant/GetCurrentTenantUseCase.d.ts +17 -0
- package/api/features/GetCurrentTenant/GetCurrentTenantUseCase.js +32 -0
- package/api/features/GetCurrentTenant/GetCurrentTenantUseCase.js.map +1 -0
- package/api/features/GetCurrentTenant/abstractions.d.ts +24 -0
- package/api/features/GetCurrentTenant/abstractions.js +5 -0
- package/api/features/GetCurrentTenant/abstractions.js.map +1 -0
- package/api/features/GetCurrentTenant/feature.d.ts +4 -0
- package/api/features/GetCurrentTenant/feature.js +11 -0
- package/api/features/GetCurrentTenant/feature.js.map +1 -0
- package/api/features/GetTenantById/GetTenantByIdRepository.d.ts +17 -0
- package/api/features/GetTenantById/GetTenantByIdRepository.js +44 -0
- package/api/features/GetTenantById/GetTenantByIdRepository.js.map +1 -0
- package/api/features/GetTenantById/GetTenantByIdUseCase.d.ts +12 -0
- package/api/features/GetTenantById/GetTenantByIdUseCase.js +23 -0
- package/api/features/GetTenantById/GetTenantByIdUseCase.js.map +1 -0
- package/api/features/GetTenantById/abstractions.d.ts +38 -0
- package/api/features/GetTenantById/abstractions.js +6 -0
- package/api/features/GetTenantById/abstractions.js.map +1 -0
- package/api/features/GetTenantById/feature.d.ts +4 -0
- package/api/features/GetTenantById/feature.js +13 -0
- package/api/features/GetTenantById/feature.js.map +1 -0
- package/api/features/UpdateTenant/UpdateTenantRepository.d.ts +17 -0
- package/api/features/UpdateTenant/UpdateTenantRepository.js +51 -0
- package/api/features/UpdateTenant/UpdateTenantRepository.js.map +1 -0
- package/api/features/UpdateTenant/UpdateTenantUseCase.d.ts +12 -0
- package/api/features/UpdateTenant/UpdateTenantUseCase.js +21 -0
- package/api/features/UpdateTenant/UpdateTenantUseCase.js.map +1 -0
- package/api/features/UpdateTenant/abstractions.d.ts +39 -0
- package/api/features/UpdateTenant/abstractions.js +6 -0
- package/api/features/UpdateTenant/abstractions.js.map +1 -0
- package/api/features/UpdateTenant/feature.d.ts +4 -0
- package/api/features/UpdateTenant/feature.js +13 -0
- package/api/features/UpdateTenant/feature.js.map +1 -0
- package/api/graphql/CreateTenantSchema.d.ts +16 -0
- package/api/graphql/CreateTenantSchema.js +83 -0
- package/api/graphql/CreateTenantSchema.js.map +1 -0
- package/api/graphql/DisableTenantSchema.d.ts +8 -0
- package/api/graphql/DisableTenantSchema.js +31 -0
- package/api/graphql/DisableTenantSchema.js.map +1 -0
- package/api/graphql/EnableTenantSchema.d.ts +8 -0
- package/api/graphql/EnableTenantSchema.js +31 -0
- package/api/graphql/EnableTenantSchema.js.map +1 -0
- package/api/graphql/GetCurrentTenantSchema.d.ts +8 -0
- package/api/graphql/GetCurrentTenantSchema.js +49 -0
- package/api/graphql/GetCurrentTenantSchema.js.map +1 -0
- package/api/graphql/InstallTenantSchema.d.ts +8 -0
- package/api/graphql/InstallTenantSchema.js +43 -0
- package/api/graphql/InstallTenantSchema.js.map +1 -0
- package/exports/admin/tenancy.d.ts +7 -0
- package/exports/admin/tenancy.js +4 -0
- package/exports/api/tenant-manager.d.ts +9 -0
- package/exports/api/tenant-manager.js +8 -0
- package/index.d.ts +1 -0
- package/index.js +1 -0
- package/package.json +46 -0
- package/shared/Tenant.d.ts +21 -0
- package/shared/Tenant.js +27 -0
- package/shared/Tenant.js.map +1 -0
- package/shared/constants.d.ts +1 -0
- package/shared/constants.js +4 -0
- package/shared/constants.js.map +1 -0
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import react from "react";
|
|
2
|
+
import { TenantSelector as app_admin_TenantSelector, useAuthentication } from "@webiny/app-admin";
|
|
3
|
+
import { CopyButton, Icon, Tooltip, useToast } from "@webiny/admin-ui";
|
|
4
|
+
import { ReactComponent } from "@webiny/icons/business.svg";
|
|
5
|
+
const TenantSelector_TenantSelector = app_admin_TenantSelector.createDecorator(()=>function() {
|
|
6
|
+
const { identity } = useAuthentication();
|
|
7
|
+
const currentTenant = identity.currentTenant;
|
|
8
|
+
const toast = useToast();
|
|
9
|
+
const confirmClipboard = ()=>{
|
|
10
|
+
toast.showSuccessToast({
|
|
11
|
+
title: "Tenant ID copied to clipboard!"
|
|
12
|
+
});
|
|
13
|
+
};
|
|
14
|
+
return /*#__PURE__*/ react.createElement(Tooltip, {
|
|
15
|
+
content: /*#__PURE__*/ react.createElement("div", {
|
|
16
|
+
className: "flex items-center gap-x-xs"
|
|
17
|
+
}, "ID: ", currentTenant.id, /*#__PURE__*/ react.createElement(CopyButton, {
|
|
18
|
+
size: "sm",
|
|
19
|
+
value: currentTenant.id,
|
|
20
|
+
onCopy: confirmClipboard,
|
|
21
|
+
variant: "ghost-negative"
|
|
22
|
+
})),
|
|
23
|
+
side: "bottom",
|
|
24
|
+
trigger: /*#__PURE__*/ react.createElement("div", {
|
|
25
|
+
className: "flex items-center gap-x-xs cursor-pointer"
|
|
26
|
+
}, /*#__PURE__*/ react.createElement(Icon, {
|
|
27
|
+
label: "Root tenant",
|
|
28
|
+
icon: /*#__PURE__*/ react.createElement(ReactComponent, null),
|
|
29
|
+
className: "fill-neutral-xstrong"
|
|
30
|
+
}), currentTenant.name)
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
export { TenantSelector_TenantSelector as TenantSelector };
|
|
34
|
+
|
|
35
|
+
//# sourceMappingURL=TenantSelector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin/TenantSelector.js","sources":["../../src/admin/TenantSelector.tsx"],"sourcesContent":["import React from \"react\";\nimport { TenantSelector as BaseTenantSelector } from \"@webiny/app-admin\";\nimport { CopyButton, Icon, Tooltip, useToast } from \"@webiny/admin-ui\";\nimport { useAuthentication } from \"@webiny/app-admin\";\nimport { ReactComponent as TenantIcon } from \"@webiny/icons/business.svg\";\n\nexport const TenantSelector = BaseTenantSelector.createDecorator(() => {\n return function TenantSelector() {\n const { identity } = useAuthentication();\n const currentTenant = identity.currentTenant;\n const toast = useToast();\n\n const confirmClipboard = () => {\n toast.showSuccessToast({\n title: \"Tenant ID copied to clipboard!\"\n });\n };\n\n return (\n <Tooltip\n content={\n <div className={\"flex items-center gap-x-xs\"}>\n ID: {currentTenant.id}\n <CopyButton\n size=\"sm\"\n value={currentTenant.id}\n onCopy={confirmClipboard}\n variant={\"ghost-negative\"}\n />\n </div>\n }\n side={\"bottom\"}\n trigger={\n <div className={\"flex items-center gap-x-xs cursor-pointer\"}>\n <Icon\n label=\"Root tenant\"\n icon={<TenantIcon />}\n className={\"fill-neutral-xstrong\"}\n />\n {currentTenant.name}\n </div>\n }\n />\n );\n };\n});\n"],"names":["TenantSelector","BaseTenantSelector","identity","useAuthentication","currentTenant","toast","useToast","confirmClipboard","Tooltip","CopyButton","Icon","TenantIcon"],"mappings":";;;;AAMO,MAAMA,gCAAiBC,yBAAAA,eAAkC,CAAC,IACtD;QACH,MAAM,EAAEC,QAAQ,EAAE,GAAGC;QACrB,MAAMC,gBAAgBF,SAAS,aAAa;QAC5C,MAAMG,QAAQC;QAEd,MAAMC,mBAAmB;YACrBF,MAAM,gBAAgB,CAAC;gBACnB,OAAO;YACX;QACJ;QAEA,OAAO,WAAP,GACI,oBAACG,SAAOA;YACJ,uBACI,oBAAC;gBAAI,WAAW;eAA8B,QACrCJ,cAAc,EAAE,gBACrB,oBAACK,YAAUA;gBACP,MAAK;gBACL,OAAOL,cAAc,EAAE;gBACvB,QAAQG;gBACR,SAAS;;YAIrB,MAAM;YACN,uBACI,oBAAC;gBAAI,WAAW;6BACZ,oBAACG,MAAIA;gBACD,OAAM;gBACN,oBAAM,oBAACC,gBAAUA;gBACjB,WAAW;gBAEdP,cAAc,IAAI;;IAKvC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin/domain/permissionsSchema.js","sources":["../../../src/admin/domain/permissionsSchema.ts"],"sourcesContent":["import { createPermissionSchema } from \"@webiny/app-admin\";\n\nexport const TM_PERMISSIONS_SCHEMA = createPermissionSchema({\n prefix: \"tm\",\n fullAccess: true\n});\n"],"names":["TM_PERMISSIONS_SCHEMA","createPermissionSchema"],"mappings":";AAEO,MAAMA,wBAAwBC,uBAAuB;IACxD,QAAQ;IACR,YAAY;AAChB"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Permissions } from "@webiny/app-admin/exports/admin/security.js";
|
|
2
|
+
import { TM_PERMISSIONS_SCHEMA } from "../../../admin/domain/permissionsSchema.js";
|
|
3
|
+
export declare const TmPermissions: import("@webiny/di").Abstraction<{
|
|
4
|
+
canAccess: (entityId: never) => boolean;
|
|
5
|
+
canAction: (action: string, entityId: never) => boolean;
|
|
6
|
+
} & {
|
|
7
|
+
canRead: (entityId: string) => boolean;
|
|
8
|
+
canCreate: (entityId: string) => boolean;
|
|
9
|
+
canEdit: (entityId: string, item?: import("@webiny/app-admin/permissions").OwnableItem) => boolean;
|
|
10
|
+
canDelete: (entityId: string, item?: import("@webiny/app-admin/permissions").OwnableItem) => boolean;
|
|
11
|
+
} & {
|
|
12
|
+
canPublish: (entityId: string) => boolean;
|
|
13
|
+
canUnpublish: (entityId: string) => boolean;
|
|
14
|
+
}>;
|
|
15
|
+
export declare namespace TmPermissions {
|
|
16
|
+
type Interface = Permissions<typeof TM_PERMISSIONS_SCHEMA>;
|
|
17
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { createPermissionsAbstraction } from "@webiny/app-admin/exports/admin/security.js";
|
|
2
|
+
import { TM_PERMISSIONS_SCHEMA } from "../../domain/permissionsSchema.js";
|
|
3
|
+
const TmPermissions = createPermissionsAbstraction(TM_PERMISSIONS_SCHEMA);
|
|
4
|
+
export { TmPermissions };
|
|
5
|
+
|
|
6
|
+
//# sourceMappingURL=abstractions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin/features/permissions/abstractions.js","sources":["../../../../src/admin/features/permissions/abstractions.ts"],"sourcesContent":["import { createPermissionsAbstraction } from \"@webiny/app-admin/exports/admin/security.js\";\nimport type { Permissions } from \"@webiny/app-admin/exports/admin/security.js\";\nimport { TM_PERMISSIONS_SCHEMA } from \"~/admin/domain/permissionsSchema.js\";\n\nexport const TmPermissions = createPermissionsAbstraction(TM_PERMISSIONS_SCHEMA);\n\nexport namespace TmPermissions {\n export type Interface = Permissions<typeof TM_PERMISSIONS_SCHEMA>;\n}\n"],"names":["TmPermissions","createPermissionsAbstraction","TM_PERMISSIONS_SCHEMA"],"mappings":";;AAIO,MAAMA,gBAAgBC,6BAA6BC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare const TmPermissionsFeature: import("@webiny/feature/admin/createFeature.js").FeatureDefinition<{
|
|
2
|
+
permissions: {
|
|
3
|
+
canAccess: (entityId: never) => boolean;
|
|
4
|
+
canAction: (action: string, entityId: never) => boolean;
|
|
5
|
+
} & {
|
|
6
|
+
canRead: (entityId: string) => boolean;
|
|
7
|
+
canCreate: (entityId: string) => boolean;
|
|
8
|
+
canEdit: (entityId: string, item?: import("@webiny/app-admin/index.js").OwnableItem) => boolean;
|
|
9
|
+
canDelete: (entityId: string, item?: import("@webiny/app-admin/index.js").OwnableItem) => boolean;
|
|
10
|
+
} & {
|
|
11
|
+
canPublish: (entityId: string) => boolean;
|
|
12
|
+
canUnpublish: (entityId: string) => boolean;
|
|
13
|
+
};
|
|
14
|
+
}, []>;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { createPermissionsFeature } from "@webiny/app-admin/exports/admin/security.js";
|
|
2
|
+
import { TM_PERMISSIONS_SCHEMA } from "../../domain/permissionsSchema.js";
|
|
3
|
+
import { TmPermissions } from "./abstractions.js";
|
|
4
|
+
const TmPermissionsFeature = createPermissionsFeature(TM_PERMISSIONS_SCHEMA, TmPermissions);
|
|
5
|
+
export { TmPermissionsFeature };
|
|
6
|
+
|
|
7
|
+
//# sourceMappingURL=feature.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin/features/permissions/feature.js","sources":["../../../../src/admin/features/permissions/feature.ts"],"sourcesContent":["import { createPermissionsFeature } from \"@webiny/app-admin/exports/admin/security.js\";\nimport { TM_PERMISSIONS_SCHEMA } from \"~/admin/domain/permissionsSchema.js\";\nimport { TmPermissions } from \"./abstractions.js\";\n\nexport const TmPermissionsFeature = createPermissionsFeature(TM_PERMISSIONS_SCHEMA, TmPermissions);\n"],"names":["TmPermissionsFeature","createPermissionsFeature","TM_PERMISSIONS_SCHEMA","TmPermissions"],"mappings":";;;AAIO,MAAMA,uBAAuBC,yBAAyBC,uBAAuBC"}
|
package/admin/types.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { CmsContentEntry } from "@webiny/app-headless-cms/types.js";
|
|
2
|
+
import type { TenantValues } from "../shared/Tenant.js";
|
|
3
|
+
type BaseEntry = Omit<CmsContentEntry, "values">;
|
|
4
|
+
export interface TenantEntry extends BaseEntry {
|
|
5
|
+
values: TenantValues;
|
|
6
|
+
}
|
|
7
|
+
export {};
|
package/admin/types.js
ADDED
|
File without changes
|
package/api/Extension.js
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { createFeature } from "@webiny/feature/api";
|
|
2
|
+
import TenantModel from "./domain/TenantModel.js";
|
|
3
|
+
import { CreateAndInstallTenantFeature } from "./features/CreateAndInstallTenant/feature.js";
|
|
4
|
+
import { CreateTenantFeature } from "./features/CreateTenant/feature.js";
|
|
5
|
+
import { DisableTenantFeature } from "./features/DisableTenant/feature.js";
|
|
6
|
+
import { EnableTenantFeature } from "./features/EnableTenant/feature.js";
|
|
7
|
+
import { GetTenantByIdFeature } from "./features/GetTenantById/feature.js";
|
|
8
|
+
import { GetCurrentTenantFeature } from "./features/GetCurrentTenant/feature.js";
|
|
9
|
+
import { UpdateTenantFeature } from "./features/UpdateTenant/feature.js";
|
|
10
|
+
import { DeleteTenantOnEntryDeleteFeature } from "./features/DeleteTenantOnEntryDelete/feature.js";
|
|
11
|
+
import InstallTenantSchema from "./graphql/InstallTenantSchema.js";
|
|
12
|
+
import CreateTenantSchema from "./graphql/CreateTenantSchema.js";
|
|
13
|
+
import DisableTenantSchema from "./graphql/DisableTenantSchema.js";
|
|
14
|
+
import EnableTenantSchema from "./graphql/EnableTenantSchema.js";
|
|
15
|
+
import GetCurrentTenantSchema from "./graphql/GetCurrentTenantSchema.js";
|
|
16
|
+
import { AddCmsPermissionsFeature } from "./features/AddCmsPermissions/feature.js";
|
|
17
|
+
const Extension = createFeature({
|
|
18
|
+
name: "TenantManagement",
|
|
19
|
+
register (container) {
|
|
20
|
+
container.register(TenantModel);
|
|
21
|
+
container.register(InstallTenantSchema);
|
|
22
|
+
container.register(CreateTenantSchema);
|
|
23
|
+
container.register(DisableTenantSchema);
|
|
24
|
+
container.register(EnableTenantSchema);
|
|
25
|
+
container.register(GetCurrentTenantSchema);
|
|
26
|
+
CreateAndInstallTenantFeature.register(container);
|
|
27
|
+
CreateTenantFeature.register(container);
|
|
28
|
+
DisableTenantFeature.register(container);
|
|
29
|
+
EnableTenantFeature.register(container);
|
|
30
|
+
GetTenantByIdFeature.register(container);
|
|
31
|
+
GetCurrentTenantFeature.register(container);
|
|
32
|
+
UpdateTenantFeature.register(container);
|
|
33
|
+
DeleteTenantOnEntryDeleteFeature.register(container);
|
|
34
|
+
AddCmsPermissionsFeature.register(container);
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
export { Extension };
|
|
38
|
+
|
|
39
|
+
//# sourceMappingURL=Extension.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api/Extension.js","sources":["../../src/api/Extension.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport TenantModel from \"./domain/TenantModel.js\";\nimport { CreateAndInstallTenantFeature } from \"./features/CreateAndInstallTenant/feature.js\";\nimport { CreateTenantFeature } from \"./features/CreateTenant/feature.js\";\nimport { DisableTenantFeature } from \"./features/DisableTenant/feature.js\";\nimport { EnableTenantFeature } from \"./features/EnableTenant/feature.js\";\nimport { GetTenantByIdFeature } from \"./features/GetTenantById/feature.js\";\nimport { GetCurrentTenantFeature } from \"./features/GetCurrentTenant/feature.js\";\nimport { UpdateTenantFeature } from \"./features/UpdateTenant/feature.js\";\nimport { DeleteTenantOnEntryDeleteFeature } from \"./features/DeleteTenantOnEntryDelete/feature.js\";\nimport InstallTenantSchema from \"./graphql/InstallTenantSchema.js\";\nimport CreateTenantSchema from \"./graphql/CreateTenantSchema.js\";\nimport DisableTenantSchema from \"./graphql/DisableTenantSchema.js\";\nimport EnableTenantSchema from \"./graphql/EnableTenantSchema.js\";\nimport GetCurrentTenantSchema from \"./graphql/GetCurrentTenantSchema.js\";\nimport { AddCmsPermissionsFeature } from \"~/api/features/AddCmsPermissions/feature.js\";\n\nexport const Extension = createFeature({\n name: \"TenantManagement\",\n register(container) {\n container.register(TenantModel);\n\n //GraphQL\n container.register(InstallTenantSchema);\n container.register(CreateTenantSchema);\n container.register(DisableTenantSchema);\n container.register(EnableTenantSchema);\n container.register(GetCurrentTenantSchema);\n\n // Features\n CreateAndInstallTenantFeature.register(container);\n CreateTenantFeature.register(container);\n DisableTenantFeature.register(container);\n EnableTenantFeature.register(container);\n GetTenantByIdFeature.register(container);\n GetCurrentTenantFeature.register(container);\n UpdateTenantFeature.register(container);\n DeleteTenantOnEntryDeleteFeature.register(container);\n AddCmsPermissionsFeature.register(container);\n }\n});\n"],"names":["Extension","createFeature","container","TenantModel","InstallTenantSchema","CreateTenantSchema","DisableTenantSchema","EnableTenantSchema","GetCurrentTenantSchema","CreateAndInstallTenantFeature","CreateTenantFeature","DisableTenantFeature","EnableTenantFeature","GetTenantByIdFeature","GetCurrentTenantFeature","UpdateTenantFeature","DeleteTenantOnEntryDeleteFeature","AddCmsPermissionsFeature"],"mappings":";;;;;;;;;;;;;;;;AAiBO,MAAMA,YAAYC,cAAc;IACnC,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC;QAGnBD,UAAU,QAAQ,CAACE;QACnBF,UAAU,QAAQ,CAACG;QACnBH,UAAU,QAAQ,CAACI;QACnBJ,UAAU,QAAQ,CAACK;QACnBL,UAAU,QAAQ,CAACM;QAGnBC,8BAA8B,QAAQ,CAACP;QACvCQ,oBAAoB,QAAQ,CAACR;QAC7BS,qBAAqB,QAAQ,CAACT;QAC9BU,oBAAoB,QAAQ,CAACV;QAC7BW,qBAAqB,QAAQ,CAACX;QAC9BY,wBAAwB,QAAQ,CAACZ;QACjCa,oBAAoB,QAAQ,CAACb;QAC7Bc,iCAAiC,QAAQ,CAACd;QAC1Ce,yBAAyB,QAAQ,CAACf;IACtC;AACJ"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api/domain/TenantId.js","sources":["../../../src/api/domain/TenantId.ts"],"sourcesContent":["import { EntryId } from \"@webiny/api-headless-cms/exports/api/cms/entry.js\";\n\nexport class TenantId {\n static from(id?: string) {\n if (id) {\n // Ensure we have a clean id, without the revision suffix.\n return EntryId.from(id).id;\n }\n\n return EntryId.create().id;\n }\n}\n"],"names":["TenantId","id","EntryId"],"mappings":";AAEO,MAAMA;IACT,OAAO,KAAKC,EAAW,EAAE;QACrB,IAAIA,IAEA,OAAOC,QAAQ,IAAI,CAACD,IAAI,EAAE;QAG9B,OAAOC,QAAQ,MAAM,GAAG,EAAE;IAC9B;AACJ"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ModelFactory } from "@webiny/api-headless-cms/features/modelBuilder/index.js";
|
|
2
|
+
import { TenantModelExtension } from "./TenantModelExtension.js";
|
|
3
|
+
declare class TenantModelFactory implements ModelFactory.Interface {
|
|
4
|
+
private extensions;
|
|
5
|
+
constructor(extensions: TenantModelExtension.Interface[]);
|
|
6
|
+
execute(builder: ModelFactory.Builder): Promise<import("@webiny/api-headless-cms/features/modelBuilder/index.js").PublicModelBuilder[]>;
|
|
7
|
+
}
|
|
8
|
+
declare const _default: typeof TenantModelFactory & {
|
|
9
|
+
__abstraction: import("@webiny/di").Abstraction<import("@webiny/api-headless-cms/features/modelBuilder/abstractions.js").IModelFactory>;
|
|
10
|
+
};
|
|
11
|
+
export default _default;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { ModelFactory } from "@webiny/api-headless-cms/features/modelBuilder/index.js";
|
|
2
|
+
import { TenantModelExtension } from "./TenantModelExtension.js";
|
|
3
|
+
import { TENANT_MODEL_ID } from "../../shared/constants.js";
|
|
4
|
+
class TenantModelFactory {
|
|
5
|
+
constructor(extensions){
|
|
6
|
+
this.extensions = extensions;
|
|
7
|
+
}
|
|
8
|
+
async execute(builder) {
|
|
9
|
+
const model = builder.public({
|
|
10
|
+
modelId: TENANT_MODEL_ID,
|
|
11
|
+
name: "Tenant",
|
|
12
|
+
group: "hidden"
|
|
13
|
+
}).description("Manage system tenants.").titleFieldId("name").icon("fas/building").singularApiName("Tenant").pluralApiName("Tenants").tags([
|
|
14
|
+
"$publishing:false",
|
|
15
|
+
"$hidden:true"
|
|
16
|
+
]);
|
|
17
|
+
model.fields((fields)=>({
|
|
18
|
+
name: fields.text().label("Name").description("Enter a tenant name").required().renderer("textInput"),
|
|
19
|
+
description: fields.longText().label("Description").description("Enter a short tenant description").renderer("textarea").required(),
|
|
20
|
+
status: fields.text().label("Status").defaultValue("disabled").renderer("hidden").predefinedValues([
|
|
21
|
+
{
|
|
22
|
+
value: "enabled",
|
|
23
|
+
label: "Enabled"
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
value: "disabled",
|
|
27
|
+
label: "Disabled"
|
|
28
|
+
}
|
|
29
|
+
]),
|
|
30
|
+
isInstalled: fields.boolean().label("Is installed?").renderer("hidden").defaultValue(false),
|
|
31
|
+
extensions: fields.object().renderer("passthrough")
|
|
32
|
+
})).layout([
|
|
33
|
+
[
|
|
34
|
+
"name"
|
|
35
|
+
],
|
|
36
|
+
[
|
|
37
|
+
"description"
|
|
38
|
+
],
|
|
39
|
+
[
|
|
40
|
+
"extensions"
|
|
41
|
+
]
|
|
42
|
+
]);
|
|
43
|
+
for (const modifier of this.extensions)model.fields((fields)=>{
|
|
44
|
+
const extensions = fields.extend().object();
|
|
45
|
+
modifier.execute(extensions);
|
|
46
|
+
return {
|
|
47
|
+
extensions
|
|
48
|
+
};
|
|
49
|
+
});
|
|
50
|
+
return [
|
|
51
|
+
model
|
|
52
|
+
];
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
const TenantModel = ModelFactory.createImplementation({
|
|
56
|
+
implementation: TenantModelFactory,
|
|
57
|
+
dependencies: [
|
|
58
|
+
[
|
|
59
|
+
TenantModelExtension,
|
|
60
|
+
{
|
|
61
|
+
multiple: true
|
|
62
|
+
}
|
|
63
|
+
]
|
|
64
|
+
]
|
|
65
|
+
});
|
|
66
|
+
export default TenantModel;
|
|
67
|
+
|
|
68
|
+
//# sourceMappingURL=TenantModel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api/domain/TenantModel.js","sources":["../../../src/api/domain/TenantModel.ts"],"sourcesContent":["import { ModelFactory } from \"@webiny/api-headless-cms/features/modelBuilder/index.js\";\nimport { TenantModelExtension } from \"./TenantModelExtension.js\";\nimport { TENANT_MODEL_ID } from \"~/shared/constants.js\";\n\nclass TenantModelFactory implements ModelFactory.Interface {\n constructor(private extensions: TenantModelExtension.Interface[]) {}\n\n async execute(builder: ModelFactory.Builder) {\n const model = builder\n .public({\n modelId: TENANT_MODEL_ID,\n name: \"Tenant\",\n group: \"hidden\"\n })\n .description(\"Manage system tenants.\")\n .titleFieldId(\"name\")\n .icon(\"fas/building\")\n .singularApiName(\"Tenant\")\n .pluralApiName(\"Tenants\")\n .tags([\"$publishing:false\", \"$hidden:true\"]);\n\n model\n .fields(fields => ({\n name: fields\n .text()\n .label(\"Name\")\n .description(\"Enter a tenant name\")\n .required()\n .renderer(\"textInput\"),\n description: fields\n .longText()\n .label(\"Description\")\n .description(\"Enter a short tenant description\")\n .renderer(\"textarea\")\n .required(),\n status: fields\n .text()\n .label(\"Status\")\n .defaultValue(\"disabled\")\n .renderer(\"hidden\")\n .predefinedValues([\n {\n value: \"enabled\",\n label: \"Enabled\"\n },\n {\n value: \"disabled\",\n label: \"Disabled\"\n }\n ]),\n isInstalled: fields\n .boolean()\n .label(\"Is installed?\")\n .renderer(\"hidden\")\n .defaultValue(false),\n extensions: fields.object().renderer(\"passthrough\")\n }))\n .layout([[\"name\"], [\"description\"], [\"extensions\"]]);\n\n for (const modifier of this.extensions) {\n model.fields(fields => {\n const extensions = fields.extend().object();\n modifier.execute(extensions);\n\n return { extensions };\n });\n }\n\n return [model];\n }\n}\n\nexport default ModelFactory.createImplementation({\n implementation: TenantModelFactory,\n dependencies: [[TenantModelExtension, { multiple: true }]]\n});\n"],"names":["TenantModelFactory","extensions","builder","model","TENANT_MODEL_ID","fields","modifier","ModelFactory","TenantModelExtension"],"mappings":";;;AAIA,MAAMA;IACF,YAAoBC,UAA4C,CAAE;aAA9CA,UAAU,GAAVA;IAA+C;IAEnE,MAAM,QAAQC,OAA6B,EAAE;QACzC,MAAMC,QAAQD,QACT,MAAM,CAAC;YACJ,SAASE;YACT,MAAM;YACN,OAAO;QACX,GACC,WAAW,CAAC,0BACZ,YAAY,CAAC,QACb,IAAI,CAAC,gBACL,eAAe,CAAC,UAChB,aAAa,CAAC,WACd,IAAI,CAAC;YAAC;YAAqB;SAAe;QAE/CD,MACK,MAAM,CAACE,CAAAA,SAAW;gBACf,MAAMA,OACD,IAAI,GACJ,KAAK,CAAC,QACN,WAAW,CAAC,uBACZ,QAAQ,GACR,QAAQ,CAAC;gBACd,aAAaA,OACR,QAAQ,GACR,KAAK,CAAC,eACN,WAAW,CAAC,oCACZ,QAAQ,CAAC,YACT,QAAQ;gBACb,QAAQA,OACH,IAAI,GACJ,KAAK,CAAC,UACN,YAAY,CAAC,YACb,QAAQ,CAAC,UACT,gBAAgB,CAAC;oBACd;wBACI,OAAO;wBACP,OAAO;oBACX;oBACA;wBACI,OAAO;wBACP,OAAO;oBACX;iBACH;gBACL,aAAaA,OACR,OAAO,GACP,KAAK,CAAC,iBACN,QAAQ,CAAC,UACT,YAAY,CAAC;gBAClB,YAAYA,OAAO,MAAM,GAAG,QAAQ,CAAC;YACzC,IACC,MAAM,CAAC;YAAC;gBAAC;aAAO;YAAE;gBAAC;aAAc;YAAE;gBAAC;aAAa;SAAC;QAEvD,KAAK,MAAMC,YAAY,IAAI,CAAC,UAAU,CAClCH,MAAM,MAAM,CAACE,CAAAA;YACT,MAAMJ,aAAaI,OAAO,MAAM,GAAG,MAAM;YACzCC,SAAS,OAAO,CAACL;YAEjB,OAAO;gBAAEA;YAAW;QACxB;QAGJ,OAAO;YAACE;SAAM;IAClB;AACJ;AAEA,oBAAeI,aAAa,oBAAoB,CAAC;IAC7C,gBAAgBP;IAChB,cAAc;QAAC;YAACQ;YAAsB;gBAAE,UAAU;YAAK;SAAE;KAAC;AAC9D"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { IObjectFieldBuilder } from "@webiny/api-headless-cms/features/modelBuilder/fields/ObjectFieldType.js";
|
|
2
|
+
export type IExtension = Pick<IObjectFieldBuilder, "fields" | "layout">;
|
|
3
|
+
export interface ITenantModelExtension {
|
|
4
|
+
execute(extension: IExtension): void;
|
|
5
|
+
}
|
|
6
|
+
/** Extend the tenant content model with custom fields. */
|
|
7
|
+
export declare const TenantModelExtension: import("@webiny/di").Abstraction<ITenantModelExtension>;
|
|
8
|
+
export declare namespace TenantModelExtension {
|
|
9
|
+
type Interface = ITenantModelExtension;
|
|
10
|
+
type Extension = IExtension;
|
|
11
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api/domain/TenantModelExtension.js","sources":["../../../src/api/domain/TenantModelExtension.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport { IObjectFieldBuilder } from \"@webiny/api-headless-cms/features/modelBuilder/fields/ObjectFieldType.js\";\n\nexport type IExtension = Pick<IObjectFieldBuilder, \"fields\" | \"layout\">;\n\nexport interface ITenantModelExtension {\n execute(extension: IExtension): void;\n}\n\n/** Extend the tenant content model with custom fields. */\nexport const TenantModelExtension =\n createAbstraction<ITenantModelExtension>(\"TenantModelExtension\");\n\nexport namespace TenantModelExtension {\n export type Interface = ITenantModelExtension;\n export type Extension = IExtension;\n}\n"],"names":["TenantModelExtension","createAbstraction"],"mappings":";AAUO,MAAMA,uBACTC,kBAAyC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { BaseError } from "@webiny/feature/api";
|
|
2
|
+
export declare class TenantNotFoundError extends BaseError {
|
|
3
|
+
readonly code: "Tenant/NotFound";
|
|
4
|
+
constructor(id: string);
|
|
5
|
+
}
|
|
6
|
+
export declare class TenantModelNotFoundError extends BaseError {
|
|
7
|
+
readonly code: "Tenant/ModelNotFound";
|
|
8
|
+
constructor();
|
|
9
|
+
}
|
|
10
|
+
export declare class TenantPersistenceError extends BaseError<{
|
|
11
|
+
error: Error;
|
|
12
|
+
}> {
|
|
13
|
+
readonly code: "Tenant/Persist";
|
|
14
|
+
constructor(error: Error);
|
|
15
|
+
}
|
|
16
|
+
export declare class TenantCreationError extends BaseError<{
|
|
17
|
+
error: Error;
|
|
18
|
+
}> {
|
|
19
|
+
readonly code: "Tenant/Create";
|
|
20
|
+
constructor(error: Error);
|
|
21
|
+
}
|
|
22
|
+
export declare class TenantInstallationError extends BaseError<{
|
|
23
|
+
error: Error;
|
|
24
|
+
}> {
|
|
25
|
+
readonly code: "Tenant/Install";
|
|
26
|
+
constructor(error: Error);
|
|
27
|
+
}
|
|
28
|
+
export declare class TenantUpdateError extends BaseError<{
|
|
29
|
+
error: Error;
|
|
30
|
+
}> {
|
|
31
|
+
readonly code: "Tenant/Update";
|
|
32
|
+
constructor(error: Error);
|
|
33
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { BaseError } from "@webiny/feature/api";
|
|
2
|
+
class TenantNotFoundError extends BaseError {
|
|
3
|
+
constructor(id){
|
|
4
|
+
super({
|
|
5
|
+
message: `Tenant with id "${id}" was not found!`
|
|
6
|
+
}), this.code = "Tenant/NotFound";
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
class TenantModelNotFoundError extends BaseError {
|
|
10
|
+
constructor(){
|
|
11
|
+
super({
|
|
12
|
+
message: "Tenant model was not found!"
|
|
13
|
+
}), this.code = "Tenant/ModelNotFound";
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
class TenantPersistenceError extends BaseError {
|
|
17
|
+
constructor(error){
|
|
18
|
+
super({
|
|
19
|
+
message: error.message,
|
|
20
|
+
data: {
|
|
21
|
+
error
|
|
22
|
+
}
|
|
23
|
+
}), this.code = "Tenant/Persist";
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
class TenantCreationError extends BaseError {
|
|
27
|
+
constructor(error){
|
|
28
|
+
super({
|
|
29
|
+
message: error.message,
|
|
30
|
+
data: {
|
|
31
|
+
error
|
|
32
|
+
}
|
|
33
|
+
}), this.code = "Tenant/Create";
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
class TenantInstallationError extends BaseError {
|
|
37
|
+
constructor(error){
|
|
38
|
+
super({
|
|
39
|
+
message: error.message,
|
|
40
|
+
data: {
|
|
41
|
+
error
|
|
42
|
+
}
|
|
43
|
+
}), this.code = "Tenant/Install";
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
class TenantUpdateError extends BaseError {
|
|
47
|
+
constructor(error){
|
|
48
|
+
super({
|
|
49
|
+
message: error.message,
|
|
50
|
+
data: {
|
|
51
|
+
error
|
|
52
|
+
}
|
|
53
|
+
}), this.code = "Tenant/Update";
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
export { TenantCreationError, TenantInstallationError, TenantModelNotFoundError, TenantNotFoundError, TenantPersistenceError, TenantUpdateError };
|
|
57
|
+
|
|
58
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api/domain/errors.js","sources":["../../../src/api/domain/errors.ts"],"sourcesContent":["import { BaseError } from \"@webiny/feature/api\";\n\nexport class TenantNotFoundError extends BaseError {\n override readonly code = \"Tenant/NotFound\" as const;\n\n constructor(id: string) {\n super({ message: `Tenant with id \"${id}\" was not found!` });\n }\n}\n\nexport class TenantModelNotFoundError extends BaseError {\n override readonly code = \"Tenant/ModelNotFound\" as const;\n\n constructor() {\n super({ message: `Tenant model was not found!` });\n }\n}\n\nexport class TenantPersistenceError extends BaseError<{ error: Error }> {\n override readonly code = \"Tenant/Persist\" as const;\n\n constructor(error: Error) {\n super({ message: error.message, data: { error } });\n }\n}\n\nexport class TenantCreationError extends BaseError<{ error: Error }> {\n override readonly code = \"Tenant/Create\" as const;\n\n constructor(error: Error) {\n super({ message: error.message, data: { error } });\n }\n}\n\nexport class TenantInstallationError extends BaseError<{ error: Error }> {\n override readonly code = \"Tenant/Install\" as const;\n\n constructor(error: Error) {\n super({ message: error.message, data: { error } });\n }\n}\n\nexport class TenantUpdateError extends BaseError<{ error: Error }> {\n override readonly code = \"Tenant/Update\" as const;\n\n constructor(error: Error) {\n super({ message: error.message, data: { error } });\n }\n}\n"],"names":["TenantNotFoundError","BaseError","id","TenantModelNotFoundError","TenantPersistenceError","error","TenantCreationError","TenantInstallationError","TenantUpdateError"],"mappings":";AAEO,MAAMA,4BAA4BC;IAGrC,YAAYC,EAAU,CAAE;QACpB,KAAK,CAAC;YAAE,SAAS,CAAC,gBAAgB,EAAEA,GAAG,gBAAgB,CAAC;QAAC,SAH3C,IAAI,GAAG;IAIzB;AACJ;AAEO,MAAMC,iCAAiCF;IAG1C,aAAc;QACV,KAAK,CAAC;YAAE,SAAS;QAA8B,SAHjC,IAAI,GAAG;IAIzB;AACJ;AAEO,MAAMG,+BAA+BH;IAGxC,YAAYI,KAAY,CAAE;QACtB,KAAK,CAAC;YAAE,SAASA,MAAM,OAAO;YAAE,MAAM;gBAAEA;YAAM;QAAE,SAHlC,IAAI,GAAG;IAIzB;AACJ;AAEO,MAAMC,4BAA4BL;IAGrC,YAAYI,KAAY,CAAE;QACtB,KAAK,CAAC;YAAE,SAASA,MAAM,OAAO;YAAE,MAAM;gBAAEA;YAAM;QAAE,SAHlC,IAAI,GAAG;IAIzB;AACJ;AAEO,MAAME,gCAAgCN;IAGzC,YAAYI,KAAY,CAAE;QACtB,KAAK,CAAC;YAAE,SAASA,MAAM,OAAO;YAAE,MAAM;gBAAEA;YAAM;QAAE,SAHlC,IAAI,GAAG;IAIzB;AACJ;AAEO,MAAMG,0BAA0BP;IAGnC,YAAYI,KAAY,CAAE;QACtB,KAAK,CAAC;YAAE,SAASA,MAAM,OAAO;YAAE,MAAM;gBAAEA;YAAM;QAAE,SAHlC,IAAI,GAAG;IAIzB;AACJ"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { PermissionTransformer } from "@webiny/api-core/features/security/authorization/AuthorizationContext/abstractions.js";
|
|
2
|
+
declare class AddCmsPermissions implements PermissionTransformer.Interface {
|
|
3
|
+
execute(permission: PermissionTransformer.Permission): PermissionTransformer.Permission[] | PermissionTransformer.Permission;
|
|
4
|
+
}
|
|
5
|
+
declare const _default: typeof AddCmsPermissions & {
|
|
6
|
+
__abstraction: import("@webiny/di").Abstraction<import("@webiny/api-core/features/security/authorization/AuthorizationContext/abstractions.js").IPermissionTransformer>;
|
|
7
|
+
};
|
|
8
|
+
export default _default;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { PermissionTransformer } from "@webiny/api-core/features/security/authorization/AuthorizationContext/abstractions.js";
|
|
2
|
+
import { TENANT_MODEL_ID } from "../../../shared/constants.js";
|
|
3
|
+
class AddCmsPermissions {
|
|
4
|
+
execute(permission) {
|
|
5
|
+
if ("tm.*" !== permission.name) return permission;
|
|
6
|
+
return [
|
|
7
|
+
permission,
|
|
8
|
+
{
|
|
9
|
+
name: "cms.endpoint.manage",
|
|
10
|
+
_src: "tenant-manager"
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
name: "cms.contentModel",
|
|
14
|
+
own: false,
|
|
15
|
+
rwd: "r",
|
|
16
|
+
pw: "",
|
|
17
|
+
models: [
|
|
18
|
+
TENANT_MODEL_ID
|
|
19
|
+
],
|
|
20
|
+
_src: "tenant-manager"
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
name: "cms.contentModelGroup",
|
|
24
|
+
own: false,
|
|
25
|
+
rwd: "r",
|
|
26
|
+
pw: "",
|
|
27
|
+
groups: [
|
|
28
|
+
"hidden"
|
|
29
|
+
],
|
|
30
|
+
_src: "tenant-manager"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
name: "cms.contentEntry",
|
|
34
|
+
own: false,
|
|
35
|
+
rwd: "rwd",
|
|
36
|
+
pw: "",
|
|
37
|
+
_src: "tenant-manager"
|
|
38
|
+
}
|
|
39
|
+
];
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
const AddCmsPermissions_AddCmsPermissions = PermissionTransformer.createImplementation({
|
|
43
|
+
implementation: AddCmsPermissions,
|
|
44
|
+
dependencies: []
|
|
45
|
+
});
|
|
46
|
+
export default AddCmsPermissions_AddCmsPermissions;
|
|
47
|
+
|
|
48
|
+
//# sourceMappingURL=AddCmsPermissions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api/features/AddCmsPermissions/AddCmsPermissions.js","sources":["../../../../src/api/features/AddCmsPermissions/AddCmsPermissions.ts"],"sourcesContent":["import { PermissionTransformer } from \"@webiny/api-core/features/security/authorization/AuthorizationContext/abstractions.js\";\nimport { TENANT_MODEL_ID } from \"~/shared/constants.js\";\n\nclass AddCmsPermissions implements PermissionTransformer.Interface {\n execute(permission: PermissionTransformer.Permission) {\n if (permission.name !== \"tm.*\") {\n return permission;\n }\n\n return [\n permission,\n {\n name: \"cms.endpoint.manage\",\n _src: \"tenant-manager\"\n },\n {\n name: \"cms.contentModel\",\n own: false,\n rwd: \"r\",\n pw: \"\",\n models: [TENANT_MODEL_ID],\n _src: \"tenant-manager\"\n },\n {\n name: \"cms.contentModelGroup\",\n own: false,\n rwd: \"r\",\n pw: \"\",\n groups: [\"hidden\"],\n _src: \"tenant-manager\"\n },\n {\n name: \"cms.contentEntry\",\n own: false,\n rwd: \"rwd\",\n pw: \"\",\n _src: \"tenant-manager\"\n }\n ];\n }\n}\n\nexport default PermissionTransformer.createImplementation({\n implementation: AddCmsPermissions,\n dependencies: []\n});\n"],"names":["AddCmsPermissions","permission","TENANT_MODEL_ID","PermissionTransformer"],"mappings":";;AAGA,MAAMA;IACF,QAAQC,UAA4C,EAAE;QAClD,IAAIA,AAAoB,WAApBA,WAAW,IAAI,EACf,OAAOA;QAGX,OAAO;YACHA;YACA;gBACI,MAAM;gBACN,MAAM;YACV;YACA;gBACI,MAAM;gBACN,KAAK;gBACL,KAAK;gBACL,IAAI;gBACJ,QAAQ;oBAACC;iBAAgB;gBACzB,MAAM;YACV;YACA;gBACI,MAAM;gBACN,KAAK;gBACL,KAAK;gBACL,IAAI;gBACJ,QAAQ;oBAAC;iBAAS;gBAClB,MAAM;YACV;YACA;gBACI,MAAM;gBACN,KAAK;gBACL,KAAK;gBACL,IAAI;gBACJ,MAAM;YACV;SACH;IACL;AACJ;AAEA,4CAAeC,sBAAsB,oBAAoB,CAAC;IACtD,gBAAgBH;IAChB,cAAc,EAAE;AACpB"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { createFeature } from "@webiny/feature/api";
|
|
2
|
+
import AddCmsPermissions from "./AddCmsPermissions.js";
|
|
3
|
+
const AddCmsPermissionsFeature = createFeature({
|
|
4
|
+
name: "AddCmsPermissions",
|
|
5
|
+
register (container) {
|
|
6
|
+
container.register(AddCmsPermissions);
|
|
7
|
+
}
|
|
8
|
+
});
|
|
9
|
+
export { AddCmsPermissionsFeature };
|
|
10
|
+
|
|
11
|
+
//# sourceMappingURL=feature.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api/features/AddCmsPermissions/feature.js","sources":["../../../../src/api/features/AddCmsPermissions/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport AddCmsPermissions from \"./AddCmsPermissions.js\";\n\nexport const AddCmsPermissionsFeature = createFeature({\n name: \"AddCmsPermissions\",\n register(container) {\n container.register(AddCmsPermissions);\n }\n});\n"],"names":["AddCmsPermissionsFeature","createFeature","container","AddCmsPermissions"],"mappings":";;AAGO,MAAMA,2BAA2BC,cAAc;IAClD,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC;IACvB;AACJ"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Result } from "@webiny/feature/api";
|
|
2
|
+
import { Tenant } from "../../../shared/Tenant.js";
|
|
3
|
+
import { GetTenantByIdUseCase } from "../GetTenantById/abstractions.js";
|
|
4
|
+
import { UpdateTenantUseCase } from "../UpdateTenant/abstractions.js";
|
|
5
|
+
import { CreateAndInstallTenantUseCase as UseCaseAbstraction } from "./abstractions.js";
|
|
6
|
+
import * as Tenancy from "@webiny/api-core/exports/api/tenancy.js";
|
|
7
|
+
import { IdentityContext } from "@webiny/api-core/exports/api/security.js";
|
|
8
|
+
declare class CreateAndInstallTenantUseCase implements UseCaseAbstraction.Interface {
|
|
9
|
+
private identityContext;
|
|
10
|
+
private getTenantByIdUseCase;
|
|
11
|
+
private updateTenantUseCase;
|
|
12
|
+
private coreGetTenantById;
|
|
13
|
+
private coreCreateTenant;
|
|
14
|
+
private coreUpdateTenant;
|
|
15
|
+
private coreDeleteTenant;
|
|
16
|
+
private coreInstallTenant;
|
|
17
|
+
constructor(identityContext: IdentityContext.Interface, getTenantByIdUseCase: GetTenantByIdUseCase.Interface, updateTenantUseCase: UpdateTenantUseCase.Interface, coreGetTenantById: Tenancy.GetTenantByIdUseCase.Interface, coreCreateTenant: Tenancy.CreateTenantUseCase.Interface, coreUpdateTenant: Tenancy.UpdateTenantUseCase.Interface, coreDeleteTenant: Tenancy.DeleteTenantUseCase.Interface, coreInstallTenant: Tenancy.InstallTenantUseCase.Interface);
|
|
18
|
+
execute(tenantId: string): Promise<Result<Tenant, UseCaseAbstraction.Error>>;
|
|
19
|
+
private markTenantInstalled;
|
|
20
|
+
}
|
|
21
|
+
declare const _default: typeof CreateAndInstallTenantUseCase & {
|
|
22
|
+
__abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").ICreateAndInstallTenantUseCase>;
|
|
23
|
+
};
|
|
24
|
+
export default _default;
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { Result } from "@webiny/feature/api";
|
|
2
|
+
import { EntryId } from "@webiny/api-headless-cms/domain/contentEntry/EntryId.js";
|
|
3
|
+
import { TenantCreationError, TenantInstallationError, TenantUpdateError } from "../../domain/errors.js";
|
|
4
|
+
import { GetTenantByIdUseCase } from "../GetTenantById/abstractions.js";
|
|
5
|
+
import { UpdateTenantUseCase } from "../UpdateTenant/abstractions.js";
|
|
6
|
+
import { CreateAndInstallTenantUseCase } from "./abstractions.js";
|
|
7
|
+
import { NotAuthorizedError } from "@webiny/api-core/features/security/shared/errors.js";
|
|
8
|
+
import { IdentityContext } from "@webiny/api-core/exports/api/security.js";
|
|
9
|
+
import * as __rspack_external__webiny_api_core_exports_api_tenancy_js_0fb78d16 from "@webiny/api-core/exports/api/tenancy.js";
|
|
10
|
+
class CreateAndInstallTenantUseCase_CreateAndInstallTenantUseCase {
|
|
11
|
+
constructor(identityContext, getTenantByIdUseCase, updateTenantUseCase, coreGetTenantById, coreCreateTenant, coreUpdateTenant, coreDeleteTenant, coreInstallTenant){
|
|
12
|
+
this.identityContext = identityContext;
|
|
13
|
+
this.getTenantByIdUseCase = getTenantByIdUseCase;
|
|
14
|
+
this.updateTenantUseCase = updateTenantUseCase;
|
|
15
|
+
this.coreGetTenantById = coreGetTenantById;
|
|
16
|
+
this.coreCreateTenant = coreCreateTenant;
|
|
17
|
+
this.coreUpdateTenant = coreUpdateTenant;
|
|
18
|
+
this.coreDeleteTenant = coreDeleteTenant;
|
|
19
|
+
this.coreInstallTenant = coreInstallTenant;
|
|
20
|
+
}
|
|
21
|
+
async execute(tenantId) {
|
|
22
|
+
if (!this.identityContext.getPermission("tm.tenant")) return Result.fail(new NotAuthorizedError({
|
|
23
|
+
message: "Not authorized to create tenants!"
|
|
24
|
+
}));
|
|
25
|
+
const entryId = EntryId.from(tenantId);
|
|
26
|
+
const tenantResult = await this.getTenantByIdUseCase.execute(entryId.id);
|
|
27
|
+
if (tenantResult.isFail()) return Result.fail(tenantResult.error);
|
|
28
|
+
const tenant = tenantResult.value;
|
|
29
|
+
const existingTenantResult = await this.coreGetTenantById.execute(tenant.id);
|
|
30
|
+
if (existingTenantResult.isOk()) {
|
|
31
|
+
await this.coreUpdateTenant.execute(tenant.id, {
|
|
32
|
+
name: tenant.values.name,
|
|
33
|
+
description: tenant.values.description,
|
|
34
|
+
status: "enabled"
|
|
35
|
+
});
|
|
36
|
+
return this.markTenantInstalled(tenant);
|
|
37
|
+
}
|
|
38
|
+
const createTenantResult = await this.coreCreateTenant.execute({
|
|
39
|
+
id: entryId.id,
|
|
40
|
+
name: tenant.values.name,
|
|
41
|
+
parent: "root",
|
|
42
|
+
description: tenant.values.name,
|
|
43
|
+
tags: []
|
|
44
|
+
});
|
|
45
|
+
if (createTenantResult.isFail()) return Result.fail(new TenantCreationError(createTenantResult.error));
|
|
46
|
+
const createdTenant = createTenantResult.value;
|
|
47
|
+
const installResult = await this.coreInstallTenant.execute({
|
|
48
|
+
tenant: createdTenant,
|
|
49
|
+
installationInput: []
|
|
50
|
+
});
|
|
51
|
+
if (installResult.isFail()) {
|
|
52
|
+
await this.coreDeleteTenant.execute(createdTenant.id);
|
|
53
|
+
return Result.fail(new TenantInstallationError(installResult.error));
|
|
54
|
+
}
|
|
55
|
+
return this.markTenantInstalled(tenant);
|
|
56
|
+
}
|
|
57
|
+
async markTenantInstalled(tenant) {
|
|
58
|
+
const updateResult = await this.updateTenantUseCase.execute(tenant.id, {
|
|
59
|
+
status: "enabled",
|
|
60
|
+
isInstalled: true
|
|
61
|
+
});
|
|
62
|
+
if (updateResult.isFail()) return Result.fail(new TenantUpdateError(updateResult.error));
|
|
63
|
+
return Result.ok(updateResult.value);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
const CreateAndInstallTenant_CreateAndInstallTenantUseCase = CreateAndInstallTenantUseCase.createImplementation({
|
|
67
|
+
implementation: CreateAndInstallTenantUseCase_CreateAndInstallTenantUseCase,
|
|
68
|
+
dependencies: [
|
|
69
|
+
IdentityContext,
|
|
70
|
+
GetTenantByIdUseCase,
|
|
71
|
+
UpdateTenantUseCase,
|
|
72
|
+
__rspack_external__webiny_api_core_exports_api_tenancy_js_0fb78d16.GetTenantByIdUseCase,
|
|
73
|
+
__rspack_external__webiny_api_core_exports_api_tenancy_js_0fb78d16.CreateTenantUseCase,
|
|
74
|
+
__rspack_external__webiny_api_core_exports_api_tenancy_js_0fb78d16.UpdateTenantUseCase,
|
|
75
|
+
__rspack_external__webiny_api_core_exports_api_tenancy_js_0fb78d16.DeleteTenantUseCase,
|
|
76
|
+
__rspack_external__webiny_api_core_exports_api_tenancy_js_0fb78d16.InstallTenantUseCase
|
|
77
|
+
]
|
|
78
|
+
});
|
|
79
|
+
export default CreateAndInstallTenant_CreateAndInstallTenantUseCase;
|
|
80
|
+
|
|
81
|
+
//# sourceMappingURL=CreateAndInstallTenantUseCase.js.map
|