@webiny/api-aco 5.37.8 → 5.38.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/apps/AcoApp.d.ts +4 -0
- package/apps/AcoApp.js +44 -5
- package/apps/AcoApp.js.map +1 -1
- package/apps/AcoApps.js +3 -1
- package/apps/app.gql.js +6 -4
- package/apps/app.gql.js.map +1 -1
- package/apps/index.js +3 -1
- package/createAcoContext.js +98 -15
- package/createAcoContext.js.map +1 -1
- package/createAcoGraphQL.js +5 -2
- package/createAcoGraphQL.js.map +1 -1
- package/createAcoHooks.js +9 -3
- package/createAcoHooks.js.map +1 -1
- package/createAcoModels.js +5 -2
- package/createAcoModels.js.map +1 -1
- package/createAcoStorageOperations.js +5 -2
- package/createAcoStorageOperations.js.map +1 -1
- package/fields/index.js +3 -1
- package/fields/location.js +3 -1
- package/filter/filter.crud.d.ts +3 -0
- package/filter/filter.crud.js +94 -0
- package/filter/filter.crud.js.map +1 -0
- package/filter/filter.gql.d.ts +3 -0
- package/filter/filter.gql.js +150 -0
- package/filter/filter.gql.js.map +1 -0
- package/filter/filter.model.d.ts +4 -0
- package/filter/filter.model.js +127 -0
- package/filter/filter.model.js.map +1 -0
- package/filter/filter.so.d.ts +3 -0
- package/filter/filter.so.js +96 -0
- package/filter/filter.so.js.map +1 -0
- package/filter/filter.types.d.ts +95 -0
- package/filter/filter.types.js +14 -0
- package/filter/filter.types.js.map +1 -0
- package/folder/folder.crud.d.ts +8 -1
- package/folder/folder.crud.js +197 -15
- package/folder/folder.crud.js.map +1 -1
- package/folder/folder.gql.js +75 -7
- package/folder/folder.gql.js.map +1 -1
- package/folder/folder.model.js +52 -3
- package/folder/folder.model.js.map +1 -1
- package/folder/folder.so.js +12 -4
- package/folder/folder.so.js.map +1 -1
- package/folder/folder.types.d.ts +23 -0
- package/folder/folder.types.js +3 -1
- package/folder/folder.types.js.map +1 -1
- package/folder/onFolderBeforeDeleteAco.hook.d.ts +2 -0
- package/folder/{onFolderBeforeDelete.hook.js → onFolderBeforeDeleteAco.hook.js} +8 -6
- package/folder/onFolderBeforeDeleteAco.hook.js.map +1 -0
- package/folder/onFolderBeforeDeleteFm.hook.d.ts +2 -0
- package/folder/onFolderBeforeDeleteFm.hook.js +49 -0
- package/folder/onFolderBeforeDeleteFm.hook.js.map +1 -0
- package/folder/onFolderBeforeDeleteHcms.hook.d.ts +2 -0
- package/folder/onFolderBeforeDeleteHcms.hook.js +56 -0
- package/folder/onFolderBeforeDeleteHcms.hook.js.map +1 -0
- package/index.d.ts +1 -0
- package/index.js +12 -2
- package/index.js.map +1 -1
- package/package.json +25 -20
- package/plugins/AcoAppModifierPlugin.js +3 -1
- package/plugins/AcoAppRegisterPlugin.js +3 -1
- package/plugins/index.js +3 -1
- package/record/graphql/createAppResolvers.js +11 -9
- package/record/graphql/createAppResolvers.js.map +1 -1
- package/record/graphql/createAppSchema.js +3 -1
- package/record/record.crud.js +3 -1
- package/record/record.gql.js +3 -1
- package/record/record.model.js +3 -1
- package/record/record.so.js +3 -1
- package/record/record.types.d.ts +2 -1
- package/record/record.types.js +3 -1
- package/record/record.types.js.map +1 -1
- package/types.d.ts +19 -5
- package/types.js +16 -1
- package/types.js.map +1 -1
- package/utils/FolderLevelPermissions.d.ts +68 -0
- package/utils/FolderLevelPermissions.js +370 -0
- package/utils/FolderLevelPermissions.js.map +1 -0
- package/utils/acoRecordId.js +3 -1
- package/utils/createListSort.js +3 -1
- package/utils/createModelField.js +3 -1
- package/utils/createOperationsWrapper.js +3 -1
- package/utils/decorators/CmsEntriesCrudDecorators.d.ts +11 -0
- package/utils/decorators/CmsEntriesCrudDecorators.js +244 -0
- package/utils/decorators/CmsEntriesCrudDecorators.js.map +1 -0
- package/utils/decorators/constants.d.ts +1 -0
- package/utils/decorators/constants.js +10 -0
- package/utils/decorators/constants.js.map +1 -0
- package/utils/decorators/where.d.ts +14 -0
- package/utils/decorators/where.js +45 -0
- package/utils/decorators/where.js.map +1 -0
- package/utils/ensureAuthentication.d.ts +2 -0
- package/utils/{checkPermissions.js → ensureAuthentication.js} +5 -3
- package/utils/ensureAuthentication.js.map +1 -0
- package/utils/fieldResolver.js +3 -1
- package/utils/getFieldValues.d.ts +2 -0
- package/utils/getFieldValues.js +9 -1
- package/utils/getFieldValues.js.map +1 -1
- package/utils/getFolderAndItsAncestors.d.ts +2 -2
- package/utils/getFolderAndItsAncestors.js +16 -11
- package/utils/getFolderAndItsAncestors.js.map +1 -1
- package/utils/isInstallationPending.js +3 -1
- package/utils/modelFactory.js +3 -1
- package/utils/resolve.js +3 -1
- package/folder/onFolderBeforeDelete.hook.d.ts +0 -2
- package/folder/onFolderBeforeDelete.hook.js.map +0 -1
- package/utils/checkPermissions.d.ts +0 -2
- package/utils/checkPermissions.js.map +0 -1
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.CmsEntriesCrudDecorators = void 0;
|
|
8
|
+
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
9
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
10
|
+
var _handlerGraphql = require("@webiny/handler-graphql");
|
|
11
|
+
var _where = require("./where");
|
|
12
|
+
var _constants = require("./constants");
|
|
13
|
+
/**
|
|
14
|
+
* Keep this until we figure out how to fetch the folders.
|
|
15
|
+
*/
|
|
16
|
+
const isPageModel = model => {
|
|
17
|
+
if (model.modelId === "pbPage") {
|
|
18
|
+
return true;
|
|
19
|
+
} else if (model.modelId === "acoSearchRecord-pbpage") {
|
|
20
|
+
return true;
|
|
21
|
+
}
|
|
22
|
+
return false;
|
|
23
|
+
};
|
|
24
|
+
const createFolderType = model => {
|
|
25
|
+
if (model.modelId === "fmFile") {
|
|
26
|
+
return "FmFile";
|
|
27
|
+
} else if (isPageModel(model)) {
|
|
28
|
+
return "PbPage";
|
|
29
|
+
}
|
|
30
|
+
return `cms:${model.modelId}`;
|
|
31
|
+
};
|
|
32
|
+
const filterEntriesByFolderFactory = (context, permissions) => {
|
|
33
|
+
return async (model, entries) => {
|
|
34
|
+
const [folders] = await context.aco.folder.listAll({
|
|
35
|
+
where: {
|
|
36
|
+
type: createFolderType(model)
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
const results = await Promise.all(entries.map(async entry => {
|
|
40
|
+
var _entry$location;
|
|
41
|
+
const folderId = (_entry$location = entry.location) === null || _entry$location === void 0 ? void 0 : _entry$location.folderId;
|
|
42
|
+
if (!folderId || folderId === _constants.ROOT_FOLDER) {
|
|
43
|
+
return entry;
|
|
44
|
+
}
|
|
45
|
+
const folder = folders.find(folder => folder.id === folderId);
|
|
46
|
+
if (!folder) {
|
|
47
|
+
throw new _handlerGraphql.NotFoundError(`Folder "${folderId}" not found.`);
|
|
48
|
+
}
|
|
49
|
+
const result = await permissions.canAccessFolderContent({
|
|
50
|
+
folder,
|
|
51
|
+
rwd: "r"
|
|
52
|
+
});
|
|
53
|
+
return result ? entry : null;
|
|
54
|
+
}));
|
|
55
|
+
return results.filter(entry => !!entry);
|
|
56
|
+
};
|
|
57
|
+
};
|
|
58
|
+
class CmsEntriesCrudDecorators {
|
|
59
|
+
constructor({
|
|
60
|
+
context
|
|
61
|
+
}) {
|
|
62
|
+
(0, _defineProperty2.default)(this, "context", void 0);
|
|
63
|
+
this.context = context;
|
|
64
|
+
}
|
|
65
|
+
decorate() {
|
|
66
|
+
const context = this.context;
|
|
67
|
+
const folderLevelPermissions = context.aco.folderLevelPermissions;
|
|
68
|
+
const filterEntriesByFolder = filterEntriesByFolderFactory(context, folderLevelPermissions);
|
|
69
|
+
const originalCmsListEntries = context.cms.listEntries.bind(context.cms);
|
|
70
|
+
context.cms.listEntries = async (model, params) => {
|
|
71
|
+
const folderType = createFolderType(model);
|
|
72
|
+
const folders = await folderLevelPermissions.listAllFoldersWithPermissions(folderType);
|
|
73
|
+
const where = (0, _where.createWhere)({
|
|
74
|
+
where: params.where,
|
|
75
|
+
folders
|
|
76
|
+
});
|
|
77
|
+
return originalCmsListEntries(model, (0, _objectSpread2.default)((0, _objectSpread2.default)({}, params), {}, {
|
|
78
|
+
where
|
|
79
|
+
}));
|
|
80
|
+
};
|
|
81
|
+
const originalCmsGetEntry = context.cms.getEntry.bind(context.cms);
|
|
82
|
+
context.cms.getEntry = async (model, params) => {
|
|
83
|
+
var _entry$location2;
|
|
84
|
+
const entry = await originalCmsGetEntry(model, params);
|
|
85
|
+
const folderId = entry === null || entry === void 0 || (_entry$location2 = entry.location) === null || _entry$location2 === void 0 ? void 0 : _entry$location2.folderId;
|
|
86
|
+
if (!folderId || folderId === _constants.ROOT_FOLDER) {
|
|
87
|
+
return entry;
|
|
88
|
+
}
|
|
89
|
+
const folder = await context.aco.folder.get(folderId);
|
|
90
|
+
await folderLevelPermissions.ensureCanAccessFolderContent({
|
|
91
|
+
folder,
|
|
92
|
+
rwd: "r"
|
|
93
|
+
});
|
|
94
|
+
return entry;
|
|
95
|
+
};
|
|
96
|
+
const originalCmsGetEntryById = context.cms.getEntryById.bind(context.cms);
|
|
97
|
+
context.cms.getEntryById = async (model, params) => {
|
|
98
|
+
var _entry$location3;
|
|
99
|
+
const entry = await originalCmsGetEntryById(model, params);
|
|
100
|
+
const folderId = entry === null || entry === void 0 || (_entry$location3 = entry.location) === null || _entry$location3 === void 0 ? void 0 : _entry$location3.folderId;
|
|
101
|
+
if (!folderId || folderId === _constants.ROOT_FOLDER) {
|
|
102
|
+
return entry;
|
|
103
|
+
}
|
|
104
|
+
const folder = await context.aco.folder.get(folderId);
|
|
105
|
+
await folderLevelPermissions.ensureCanAccessFolderContent({
|
|
106
|
+
folder,
|
|
107
|
+
rwd: "r"
|
|
108
|
+
});
|
|
109
|
+
return entry;
|
|
110
|
+
};
|
|
111
|
+
const originalGetLatestEntriesByIds = context.cms.getLatestEntriesByIds.bind(context.cms);
|
|
112
|
+
context.cms.getLatestEntriesByIds = async (model, ids) => {
|
|
113
|
+
const entries = await originalGetLatestEntriesByIds(model, ids);
|
|
114
|
+
return filterEntriesByFolder(model, entries);
|
|
115
|
+
};
|
|
116
|
+
const originalGetPublishedEntriesByIds = context.cms.getPublishedEntriesByIds.bind(context.cms);
|
|
117
|
+
context.cms.getPublishedEntriesByIds = async (model, ids) => {
|
|
118
|
+
const entries = await originalGetPublishedEntriesByIds(model, ids);
|
|
119
|
+
return filterEntriesByFolder(model, entries);
|
|
120
|
+
};
|
|
121
|
+
const originalCmsCreateEntry = context.cms.createEntry.bind(context.cms);
|
|
122
|
+
context.cms.createEntry = async (model, params, options) => {
|
|
123
|
+
var _params$wbyAco_locati, _params$location;
|
|
124
|
+
const folderId = ((_params$wbyAco_locati = params.wbyAco_location) === null || _params$wbyAco_locati === void 0 ? void 0 : _params$wbyAco_locati.folderId) || ((_params$location = params.location) === null || _params$location === void 0 ? void 0 : _params$location.folderId);
|
|
125
|
+
if (!folderId || folderId === _constants.ROOT_FOLDER) {
|
|
126
|
+
return originalCmsCreateEntry(model, params, options);
|
|
127
|
+
}
|
|
128
|
+
const folder = await context.aco.folder.get(folderId);
|
|
129
|
+
await folderLevelPermissions.ensureCanAccessFolderContent({
|
|
130
|
+
folder,
|
|
131
|
+
rwd: "w"
|
|
132
|
+
});
|
|
133
|
+
return originalCmsCreateEntry(model, params, options);
|
|
134
|
+
};
|
|
135
|
+
const originalCmsCreateFromEntry = context.cms.createEntryRevisionFrom.bind(context.cms);
|
|
136
|
+
context.cms.createEntryRevisionFrom = async (model, id, input, options) => {
|
|
137
|
+
var _entry$location4;
|
|
138
|
+
const entry = await context.cms.storageOperations.entries.getRevisionById(model, {
|
|
139
|
+
id
|
|
140
|
+
});
|
|
141
|
+
const folderId = entry === null || entry === void 0 || (_entry$location4 = entry.location) === null || _entry$location4 === void 0 ? void 0 : _entry$location4.folderId;
|
|
142
|
+
if (!folderId || folderId === _constants.ROOT_FOLDER) {
|
|
143
|
+
return originalCmsCreateFromEntry(model, id, input, options);
|
|
144
|
+
}
|
|
145
|
+
const folder = await context.aco.folder.get(folderId);
|
|
146
|
+
await folderLevelPermissions.ensureCanAccessFolderContent({
|
|
147
|
+
folder,
|
|
148
|
+
rwd: "w"
|
|
149
|
+
});
|
|
150
|
+
return originalCmsCreateFromEntry(model, id, input, options);
|
|
151
|
+
};
|
|
152
|
+
const originalCmsUpdateEntry = context.cms.updateEntry.bind(context.cms);
|
|
153
|
+
context.cms.updateEntry = async (model, id, input, meta, options) => {
|
|
154
|
+
var _entry$location5;
|
|
155
|
+
const entry = await context.cms.storageOperations.entries.getRevisionById(model, {
|
|
156
|
+
id
|
|
157
|
+
});
|
|
158
|
+
const folderId = entry === null || entry === void 0 || (_entry$location5 = entry.location) === null || _entry$location5 === void 0 ? void 0 : _entry$location5.folderId;
|
|
159
|
+
if (!folderId || folderId === _constants.ROOT_FOLDER) {
|
|
160
|
+
return originalCmsUpdateEntry(model, id, input, meta, options);
|
|
161
|
+
}
|
|
162
|
+
const folder = await context.aco.folder.get(folderId);
|
|
163
|
+
await folderLevelPermissions.ensureCanAccessFolderContent({
|
|
164
|
+
folder,
|
|
165
|
+
rwd: "w"
|
|
166
|
+
});
|
|
167
|
+
return originalCmsUpdateEntry(model, id, input, meta, options);
|
|
168
|
+
};
|
|
169
|
+
const originalCmsDeleteEntry = context.cms.deleteEntry.bind(context.cms);
|
|
170
|
+
context.cms.deleteEntry = async (model, id, options) => {
|
|
171
|
+
var _entry$location6;
|
|
172
|
+
const entry = await context.cms.storageOperations.entries.getRevisionById(model, {
|
|
173
|
+
id
|
|
174
|
+
});
|
|
175
|
+
const folderId = entry === null || entry === void 0 || (_entry$location6 = entry.location) === null || _entry$location6 === void 0 ? void 0 : _entry$location6.folderId;
|
|
176
|
+
if (!folderId || folderId === _constants.ROOT_FOLDER) {
|
|
177
|
+
return originalCmsDeleteEntry(model, id, options);
|
|
178
|
+
}
|
|
179
|
+
const folder = await context.aco.folder.get(folderId);
|
|
180
|
+
await folderLevelPermissions.ensureCanAccessFolderContent({
|
|
181
|
+
folder,
|
|
182
|
+
rwd: "d"
|
|
183
|
+
});
|
|
184
|
+
return originalCmsDeleteEntry(model, id, options);
|
|
185
|
+
};
|
|
186
|
+
const originalCmsDeleteEntryRevision = context.cms.deleteEntryRevision.bind(context.cms);
|
|
187
|
+
context.cms.deleteEntryRevision = async (model, id) => {
|
|
188
|
+
var _entry$location7;
|
|
189
|
+
const entry = await context.cms.storageOperations.entries.getRevisionById(model, {
|
|
190
|
+
id
|
|
191
|
+
});
|
|
192
|
+
const folderId = entry === null || entry === void 0 || (_entry$location7 = entry.location) === null || _entry$location7 === void 0 ? void 0 : _entry$location7.folderId;
|
|
193
|
+
if (!folderId || folderId === _constants.ROOT_FOLDER) {
|
|
194
|
+
return originalCmsDeleteEntryRevision(model, id);
|
|
195
|
+
}
|
|
196
|
+
const folder = await context.aco.folder.get(folderId);
|
|
197
|
+
await folderLevelPermissions.ensureCanAccessFolderContent({
|
|
198
|
+
folder,
|
|
199
|
+
rwd: "d"
|
|
200
|
+
});
|
|
201
|
+
return originalCmsDeleteEntryRevision(model, id);
|
|
202
|
+
};
|
|
203
|
+
const originalCmsMoveEntry = context.cms.moveEntry.bind(context.cms);
|
|
204
|
+
context.cms.moveEntry = async (model, id, targetFolderId) => {
|
|
205
|
+
var _entry$location8;
|
|
206
|
+
/**
|
|
207
|
+
* First we need to check if user has access to the entries existing folder.
|
|
208
|
+
*/
|
|
209
|
+
const entry = await context.cms.storageOperations.entries.getRevisionById(model, {
|
|
210
|
+
id
|
|
211
|
+
});
|
|
212
|
+
const folderId = (entry === null || entry === void 0 || (_entry$location8 = entry.location) === null || _entry$location8 === void 0 ? void 0 : _entry$location8.folderId) || _constants.ROOT_FOLDER;
|
|
213
|
+
/**
|
|
214
|
+
* If the entry is in the same folder we are trying to move it to, just continue.
|
|
215
|
+
*/
|
|
216
|
+
if (folderId === targetFolderId) {
|
|
217
|
+
return originalCmsMoveEntry(model, id, targetFolderId);
|
|
218
|
+
} else if (folderId !== _constants.ROOT_FOLDER) {
|
|
219
|
+
/**
|
|
220
|
+
* If entry current folder is not a root, check for access
|
|
221
|
+
*/
|
|
222
|
+
const folder = await context.aco.folder.get(folderId);
|
|
223
|
+
await folderLevelPermissions.ensureCanAccessFolderContent({
|
|
224
|
+
folder,
|
|
225
|
+
rwd: "w"
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* If target folder is not a ROOT_FOLDER, check for access.
|
|
230
|
+
*/
|
|
231
|
+
if (targetFolderId !== _constants.ROOT_FOLDER) {
|
|
232
|
+
const folder = await context.aco.folder.get(targetFolderId);
|
|
233
|
+
await folderLevelPermissions.ensureCanAccessFolderContent({
|
|
234
|
+
folder,
|
|
235
|
+
rwd: "w"
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
return originalCmsMoveEntry(model, id, targetFolderId);
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
exports.CmsEntriesCrudDecorators = CmsEntriesCrudDecorators;
|
|
243
|
+
|
|
244
|
+
//# sourceMappingURL=CmsEntriesCrudDecorators.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_handlerGraphql","require","_where","_constants","isPageModel","model","modelId","createFolderType","filterEntriesByFolderFactory","context","permissions","entries","folders","aco","folder","listAll","where","type","results","Promise","all","map","entry","_entry$location","folderId","location","ROOT_FOLDER","find","id","NotFoundError","result","canAccessFolderContent","rwd","filter","CmsEntriesCrudDecorators","constructor","_defineProperty2","default","decorate","folderLevelPermissions","filterEntriesByFolder","originalCmsListEntries","cms","listEntries","bind","params","folderType","listAllFoldersWithPermissions","createWhere","_objectSpread2","originalCmsGetEntry","getEntry","_entry$location2","get","ensureCanAccessFolderContent","originalCmsGetEntryById","getEntryById","_entry$location3","originalGetLatestEntriesByIds","getLatestEntriesByIds","ids","originalGetPublishedEntriesByIds","getPublishedEntriesByIds","originalCmsCreateEntry","createEntry","options","_params$wbyAco_locati","_params$location","wbyAco_location","originalCmsCreateFromEntry","createEntryRevisionFrom","input","_entry$location4","storageOperations","getRevisionById","originalCmsUpdateEntry","updateEntry","meta","_entry$location5","originalCmsDeleteEntry","deleteEntry","_entry$location6","originalCmsDeleteEntryRevision","deleteEntryRevision","_entry$location7","originalCmsMoveEntry","moveEntry","targetFolderId","_entry$location8","exports"],"sources":["CmsEntriesCrudDecorators.ts"],"sourcesContent":["import { AcoContext } from \"~/types\";\nimport { CmsEntry, CmsModel } from \"@webiny/api-headless-cms/types\";\nimport { NotFoundError } from \"@webiny/handler-graphql\";\nimport { FolderLevelPermissions } from \"~/utils/FolderLevelPermissions\";\nimport { createWhere } from \"./where\";\nimport { ROOT_FOLDER } from \"./constants\";\n\ntype Context = Pick<AcoContext, \"aco\" | \"cms\">;\n/**\n * Keep this until we figure out how to fetch the folders.\n */\nconst isPageModel = (model: CmsModel): boolean => {\n if (model.modelId === \"pbPage\") {\n return true;\n } else if (model.modelId === \"acoSearchRecord-pbpage\") {\n return true;\n }\n return false;\n};\n\nconst createFolderType = (model: CmsModel): \"FmFile\" | \"PbPage\" | `cms:${string}` => {\n if (model.modelId === \"fmFile\") {\n return \"FmFile\";\n } else if (isPageModel(model)) {\n return \"PbPage\";\n }\n return `cms:${model.modelId}`;\n};\n\nconst filterEntriesByFolderFactory = (context: Context, permissions: FolderLevelPermissions) => {\n return async (model: CmsModel, entries: CmsEntry[]) => {\n const [folders] = await context.aco.folder.listAll({\n where: {\n type: createFolderType(model)\n }\n });\n\n const results = await Promise.all(\n entries.map(async entry => {\n const folderId = entry.location?.folderId;\n if (!folderId || folderId === ROOT_FOLDER) {\n return entry;\n }\n const folder = folders.find(folder => folder.id === folderId);\n if (!folder) {\n throw new NotFoundError(`Folder \"${folderId}\" not found.`);\n }\n const result = await permissions.canAccessFolderContent({\n folder,\n rwd: \"r\"\n });\n return result ? entry : null;\n })\n );\n\n return results.filter((entry): entry is CmsEntry => !!entry);\n };\n};\n\ninterface EntryManagerCrudDecoratorsParams {\n context: Context;\n}\n\nexport class CmsEntriesCrudDecorators {\n private readonly context: Context;\n\n public constructor({ context }: EntryManagerCrudDecoratorsParams) {\n this.context = context;\n }\n\n public decorate() {\n const context = this.context;\n const folderLevelPermissions = context.aco.folderLevelPermissions;\n\n const filterEntriesByFolder = filterEntriesByFolderFactory(context, folderLevelPermissions);\n\n const originalCmsListEntries = context.cms.listEntries.bind(context.cms);\n context.cms.listEntries = async (model, params) => {\n const folderType = createFolderType(model);\n const folders = await folderLevelPermissions.listAllFoldersWithPermissions(folderType);\n\n const where = createWhere({\n where: params.where,\n folders\n });\n return originalCmsListEntries(model, {\n ...params,\n where\n });\n };\n\n const originalCmsGetEntry = context.cms.getEntry.bind(context.cms);\n context.cms.getEntry = async (model, params) => {\n const entry = await originalCmsGetEntry(model, params);\n\n const folderId = entry?.location?.folderId;\n if (!folderId || folderId === ROOT_FOLDER) {\n return entry;\n }\n\n const folder = await context.aco.folder.get(folderId);\n await folderLevelPermissions.ensureCanAccessFolderContent({\n folder,\n rwd: \"r\"\n });\n\n return entry;\n };\n\n const originalCmsGetEntryById = context.cms.getEntryById.bind(context.cms);\n context.cms.getEntryById = async (model, params) => {\n const entry = await originalCmsGetEntryById(model, params);\n\n const folderId = entry?.location?.folderId;\n if (!folderId || folderId === ROOT_FOLDER) {\n return entry;\n }\n const folder = await context.aco.folder.get(folderId);\n await folderLevelPermissions.ensureCanAccessFolderContent({\n folder,\n rwd: \"r\"\n });\n return entry;\n };\n\n const originalGetLatestEntriesByIds = context.cms.getLatestEntriesByIds.bind(context.cms);\n context.cms.getLatestEntriesByIds = async (model, ids) => {\n const entries = await originalGetLatestEntriesByIds(model, ids);\n\n return filterEntriesByFolder(model, entries);\n };\n\n const originalGetPublishedEntriesByIds = context.cms.getPublishedEntriesByIds.bind(\n context.cms\n );\n context.cms.getPublishedEntriesByIds = async (model, ids) => {\n const entries = await originalGetPublishedEntriesByIds(model, ids);\n return filterEntriesByFolder(model, entries);\n };\n\n const originalCmsCreateEntry = context.cms.createEntry.bind(context.cms);\n context.cms.createEntry = async (model, params, options) => {\n const folderId = params.wbyAco_location?.folderId || params.location?.folderId;\n\n if (!folderId || folderId === ROOT_FOLDER) {\n return originalCmsCreateEntry(model, params, options);\n }\n\n const folder = await context.aco.folder.get(folderId);\n await folderLevelPermissions.ensureCanAccessFolderContent({\n folder,\n rwd: \"w\"\n });\n\n return originalCmsCreateEntry(model, params, options);\n };\n\n const originalCmsCreateFromEntry = context.cms.createEntryRevisionFrom.bind(context.cms);\n context.cms.createEntryRevisionFrom = async (model, id, input, options) => {\n const entry = await context.cms.storageOperations.entries.getRevisionById(model, {\n id\n });\n\n const folderId = entry?.location?.folderId;\n if (!folderId || folderId === ROOT_FOLDER) {\n return originalCmsCreateFromEntry(model, id, input, options);\n }\n\n const folder = await context.aco.folder.get(folderId);\n await folderLevelPermissions.ensureCanAccessFolderContent({\n folder,\n rwd: \"w\"\n });\n\n return originalCmsCreateFromEntry(model, id, input, options);\n };\n\n const originalCmsUpdateEntry = context.cms.updateEntry.bind(context.cms);\n context.cms.updateEntry = async (model, id, input, meta, options) => {\n const entry = await context.cms.storageOperations.entries.getRevisionById(model, {\n id\n });\n\n const folderId = entry?.location?.folderId;\n if (!folderId || folderId === ROOT_FOLDER) {\n return originalCmsUpdateEntry(model, id, input, meta, options);\n }\n\n const folder = await context.aco.folder.get(folderId);\n await folderLevelPermissions.ensureCanAccessFolderContent({\n folder,\n rwd: \"w\"\n });\n\n return originalCmsUpdateEntry(model, id, input, meta, options);\n };\n\n const originalCmsDeleteEntry = context.cms.deleteEntry.bind(context.cms);\n context.cms.deleteEntry = async (model, id, options) => {\n const entry = await context.cms.storageOperations.entries.getRevisionById(model, {\n id\n });\n\n const folderId = entry?.location?.folderId;\n if (!folderId || folderId === ROOT_FOLDER) {\n return originalCmsDeleteEntry(model, id, options);\n }\n\n const folder = await context.aco.folder.get(folderId);\n await folderLevelPermissions.ensureCanAccessFolderContent({\n folder,\n rwd: \"d\"\n });\n\n return originalCmsDeleteEntry(model, id, options);\n };\n\n const originalCmsDeleteEntryRevision = context.cms.deleteEntryRevision.bind(context.cms);\n context.cms.deleteEntryRevision = async (model, id) => {\n const entry = await context.cms.storageOperations.entries.getRevisionById(model, {\n id\n });\n\n const folderId = entry?.location?.folderId;\n if (!folderId || folderId === ROOT_FOLDER) {\n return originalCmsDeleteEntryRevision(model, id);\n }\n\n const folder = await context.aco.folder.get(folderId);\n await folderLevelPermissions.ensureCanAccessFolderContent({\n folder,\n rwd: \"d\"\n });\n\n return originalCmsDeleteEntryRevision(model, id);\n };\n\n const originalCmsMoveEntry = context.cms.moveEntry.bind(context.cms);\n context.cms.moveEntry = async (model, id, targetFolderId) => {\n /**\n * First we need to check if user has access to the entries existing folder.\n */\n const entry = await context.cms.storageOperations.entries.getRevisionById(model, {\n id\n });\n const folderId = entry?.location?.folderId || ROOT_FOLDER;\n /**\n * If the entry is in the same folder we are trying to move it to, just continue.\n */\n if (folderId === targetFolderId) {\n return originalCmsMoveEntry(model, id, targetFolderId);\n } else if (folderId !== ROOT_FOLDER) {\n /**\n * If entry current folder is not a root, check for access\n */\n const folder = await context.aco.folder.get(folderId);\n await folderLevelPermissions.ensureCanAccessFolderContent({\n folder,\n rwd: \"w\"\n });\n }\n /**\n * If target folder is not a ROOT_FOLDER, check for access.\n */\n if (targetFolderId !== ROOT_FOLDER) {\n const folder = await context.aco.folder.get(targetFolderId);\n await folderLevelPermissions.ensureCanAccessFolderContent({\n folder,\n rwd: \"w\"\n });\n }\n\n return originalCmsMoveEntry(model, id, targetFolderId);\n };\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const ROOT_FOLDER = "root";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["ROOT_FOLDER","exports"],"sources":["constants.ts"],"sourcesContent":["export const ROOT_FOLDER = \"root\";\n"],"mappings":";;;;;;AAAO,MAAMA,WAAW,GAAG,MAAM;AAACC,OAAA,CAAAD,WAAA,GAAAA,WAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { CmsEntryListWhere } from "@webiny/api-headless-cms/types";
|
|
2
|
+
import { Folder } from "../../folder/folder.types";
|
|
3
|
+
interface Params {
|
|
4
|
+
where: CmsEntryListWhere | undefined;
|
|
5
|
+
folders: Folder[];
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* There are multiple cases that we need to handle:
|
|
9
|
+
* * existing location with no AND conditional
|
|
10
|
+
* * existing location with AND conditional
|
|
11
|
+
* * no existing location with no AND conditional + with AND conditional
|
|
12
|
+
*/
|
|
13
|
+
export declare const createWhere: (params: Params) => CmsEntryListWhere | undefined;
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.createWhere = void 0;
|
|
8
|
+
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
9
|
+
var _constants = require("./constants");
|
|
10
|
+
/**
|
|
11
|
+
* There are multiple cases that we need to handle:
|
|
12
|
+
* * existing location with no AND conditional
|
|
13
|
+
* * existing location with AND conditional
|
|
14
|
+
* * no existing location with no AND conditional + with AND conditional
|
|
15
|
+
*/
|
|
16
|
+
const createWhere = params => {
|
|
17
|
+
const {
|
|
18
|
+
where,
|
|
19
|
+
folders
|
|
20
|
+
} = params;
|
|
21
|
+
if (!where) {
|
|
22
|
+
return undefined;
|
|
23
|
+
}
|
|
24
|
+
const whereLocation = {
|
|
25
|
+
wbyAco_location: {
|
|
26
|
+
// At the moment, all users can access entries in the root folder.
|
|
27
|
+
// Root folder level permissions cannot be set yet.
|
|
28
|
+
folderId_in: [_constants.ROOT_FOLDER, ...folders.map(folder => folder.id)]
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
const whereAnd = where.AND;
|
|
32
|
+
if (where.wbyAco_location && !whereAnd) {
|
|
33
|
+
return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, where), {}, {
|
|
34
|
+
AND: [(0, _objectSpread2.default)({}, whereLocation)]
|
|
35
|
+
});
|
|
36
|
+
} else if (where.wbyAco_location && whereAnd) {
|
|
37
|
+
return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, where), {}, {
|
|
38
|
+
AND: [(0, _objectSpread2.default)({}, whereLocation), ...whereAnd]
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, where), whereLocation);
|
|
42
|
+
};
|
|
43
|
+
exports.createWhere = createWhere;
|
|
44
|
+
|
|
45
|
+
//# sourceMappingURL=where.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_constants","require","createWhere","params","where","folders","undefined","whereLocation","wbyAco_location","folderId_in","ROOT_FOLDER","map","folder","id","whereAnd","AND","_objectSpread2","default","exports"],"sources":["where.ts"],"sourcesContent":["import { CmsEntryListWhere } from \"@webiny/api-headless-cms/types\";\nimport { Folder } from \"~/folder/folder.types\";\nimport { ROOT_FOLDER } from \"./constants\";\n\ninterface Params {\n where: CmsEntryListWhere | undefined;\n folders: Folder[];\n}\n\n/**\n * There are multiple cases that we need to handle:\n * * existing location with no AND conditional\n * * existing location with AND conditional\n * * no existing location with no AND conditional + with AND conditional\n */\nexport const createWhere = (params: Params): CmsEntryListWhere | undefined => {\n const { where, folders } = params;\n if (!where) {\n return undefined;\n }\n const whereLocation = {\n wbyAco_location: {\n // At the moment, all users can access entries in the root folder.\n // Root folder level permissions cannot be set yet.\n folderId_in: [ROOT_FOLDER, ...folders.map(folder => folder.id)]\n }\n };\n const whereAnd = where.AND;\n if (where.wbyAco_location && !whereAnd) {\n return {\n ...where,\n AND: [\n {\n ...whereLocation\n }\n ]\n };\n } else if (where.wbyAco_location && whereAnd) {\n return {\n ...where,\n AND: [\n {\n ...whereLocation\n },\n ...whereAnd\n ]\n };\n }\n return {\n ...where,\n ...whereLocation\n };\n};\n"],"mappings":";;;;;;;;AAEA,IAAAA,UAAA,GAAAC,OAAA;AAOA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMC,WAAW,GAAIC,MAAc,IAAoC;EAC1E,MAAM;IAAEC,KAAK;IAAEC;EAAQ,CAAC,GAAGF,MAAM;EACjC,IAAI,CAACC,KAAK,EAAE;IACR,OAAOE,SAAS;EACpB;EACA,MAAMC,aAAa,GAAG;IAClBC,eAAe,EAAE;MACb;MACA;MACAC,WAAW,EAAE,CAACC,sBAAW,EAAE,GAAGL,OAAO,CAACM,GAAG,CAACC,MAAM,IAAIA,MAAM,CAACC,EAAE,CAAC;IAClE;EACJ,CAAC;EACD,MAAMC,QAAQ,GAAGV,KAAK,CAACW,GAAG;EAC1B,IAAIX,KAAK,CAACI,eAAe,IAAI,CAACM,QAAQ,EAAE;IACpC,WAAAE,cAAA,CAAAC,OAAA,MAAAD,cAAA,CAAAC,OAAA,MACOb,KAAK;MACRW,GAAG,EAAE,KAAAC,cAAA,CAAAC,OAAA,MAEMV,aAAa;IAEvB;EAET,CAAC,MAAM,IAAIH,KAAK,CAACI,eAAe,IAAIM,QAAQ,EAAE;IAC1C,WAAAE,cAAA,CAAAC,OAAA,MAAAD,cAAA,CAAAC,OAAA,MACOb,KAAK;MACRW,GAAG,EAAE,KAAAC,cAAA,CAAAC,OAAA,MAEMV,aAAa,GAEpB,GAAGO,QAAQ;IACd;EAET;EACA,WAAAE,cAAA,CAAAC,OAAA,MAAAD,cAAA,CAAAC,OAAA,MACOb,KAAK,GACLG,aAAa;AAExB,CAAC;AAACW,OAAA,CAAAhB,WAAA,GAAAA,WAAA"}
|
|
@@ -3,12 +3,14 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.
|
|
6
|
+
exports.ensureAuthentication = void 0;
|
|
7
7
|
var _apiSecurity = require("@webiny/api-security");
|
|
8
|
-
const
|
|
8
|
+
const ensureAuthentication = context => {
|
|
9
9
|
const identity = context.security.getIdentity();
|
|
10
10
|
if (!identity) {
|
|
11
11
|
throw new _apiSecurity.NotAuthorizedError();
|
|
12
12
|
}
|
|
13
13
|
};
|
|
14
|
-
exports.
|
|
14
|
+
exports.ensureAuthentication = ensureAuthentication;
|
|
15
|
+
|
|
16
|
+
//# sourceMappingURL=ensureAuthentication.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_apiSecurity","require","ensureAuthentication","context","identity","security","getIdentity","NotAuthorizedError","exports"],"sources":["ensureAuthentication.ts"],"sourcesContent":["import { NotAuthorizedError } from \"@webiny/api-security\";\nimport { AcoContext } from \"~/types\";\n\nexport const ensureAuthentication = (context: AcoContext) => {\n const identity = context.security.getIdentity();\n if (!identity) {\n throw new NotAuthorizedError();\n }\n};\n"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAGO,MAAMC,oBAAoB,GAAIC,OAAmB,IAAK;EACzD,MAAMC,QAAQ,GAAGD,OAAO,CAACE,QAAQ,CAACC,WAAW,CAAC,CAAC;EAC/C,IAAI,CAACF,QAAQ,EAAE;IACX,MAAM,IAAIG,+BAAkB,CAAC,CAAC;EAClC;AACJ,CAAC;AAACC,OAAA,CAAAN,oBAAA,GAAAA,oBAAA"}
|
package/utils/fieldResolver.js
CHANGED
|
@@ -41,4 +41,6 @@ const getTransformer = (model, fieldId) => ({
|
|
|
41
41
|
model: model,
|
|
42
42
|
field: model.fields.find(field => field.fieldId === fieldId)
|
|
43
43
|
});
|
|
44
|
-
exports.getTransformer = getTransformer;
|
|
44
|
+
exports.getTransformer = getTransformer;
|
|
45
|
+
|
|
46
|
+
//# sourceMappingURL=fieldResolver.js.map
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { CmsEntry } from "@webiny/api-headless-cms/types";
|
|
2
|
+
import { Filter } from "../filter/filter.types";
|
|
2
3
|
import { Folder } from "../folder/folder.types";
|
|
3
4
|
import { SearchRecord } from "../record/record.types";
|
|
4
5
|
export declare function getRecordFieldValues(entry: CmsEntry<any>, fields?: string[]): SearchRecord<any>;
|
|
5
6
|
export declare function getFolderFieldValues(entry: CmsEntry, fields: string[]): Folder;
|
|
7
|
+
export declare function getFilterFieldValues(entry: CmsEntry, fields: string[]): Filter;
|
package/utils/getFieldValues.js
CHANGED
|
@@ -4,6 +4,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
+
exports.getFilterFieldValues = getFilterFieldValues;
|
|
7
8
|
exports.getFolderFieldValues = getFolderFieldValues;
|
|
8
9
|
exports.getRecordFieldValues = getRecordFieldValues;
|
|
9
10
|
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
@@ -13,4 +14,11 @@ function getRecordFieldValues(entry, fields) {
|
|
|
13
14
|
}
|
|
14
15
|
function getFolderFieldValues(entry, fields) {
|
|
15
16
|
return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, (0, _pick.default)(entry, fields)), entry.values);
|
|
16
|
-
}
|
|
17
|
+
}
|
|
18
|
+
function getFilterFieldValues(entry, fields) {
|
|
19
|
+
return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, (0, _pick.default)(entry, fields)), {}, {
|
|
20
|
+
id: entry.entryId
|
|
21
|
+
}, entry.values);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
//# sourceMappingURL=getFieldValues.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_pick","_interopRequireDefault","require","getRecordFieldValues","entry","fields","_objectSpread2","default","pick","values","getFolderFieldValues"],"sources":["getFieldValues.ts"],"sourcesContent":["import pick from \"lodash/pick\";\nimport { CmsEntry } from \"@webiny/api-headless-cms/types\";\nimport { Folder } from \"~/folder/folder.types\";\nimport { SearchRecord } from \"~/record/record.types\";\n\nexport function getRecordFieldValues(entry: CmsEntry<any>, fields?: string[]) {\n return {\n ...(fields ? pick(entry, fields) : entry),\n ...entry.values\n } as SearchRecord<any>;\n}\n\nexport function getFolderFieldValues(entry: CmsEntry, fields: string[]) {\n return { ...pick(entry, fields), ...entry.values } as Folder;\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"names":["_pick","_interopRequireDefault","require","getRecordFieldValues","entry","fields","_objectSpread2","default","pick","values","getFolderFieldValues","getFilterFieldValues","id","entryId"],"sources":["getFieldValues.ts"],"sourcesContent":["import pick from \"lodash/pick\";\nimport { CmsEntry } from \"@webiny/api-headless-cms/types\";\nimport { Filter } from \"~/filter/filter.types\";\nimport { Folder } from \"~/folder/folder.types\";\nimport { SearchRecord } from \"~/record/record.types\";\n\nexport function getRecordFieldValues(entry: CmsEntry<any>, fields?: string[]) {\n return {\n ...(fields ? pick(entry, fields) : entry),\n ...entry.values\n } as SearchRecord<any>;\n}\n\nexport function getFolderFieldValues(entry: CmsEntry, fields: string[]) {\n return { ...pick(entry, fields), ...entry.values } as Folder;\n}\n\nexport function getFilterFieldValues(entry: CmsEntry, fields: string[]) {\n return { ...pick(entry, fields), id: entry.entryId, ...entry.values } as Filter;\n}\n"],"mappings":";;;;;;;;;;AAAA,IAAAA,KAAA,GAAAC,sBAAA,CAAAC,OAAA;AAMO,SAASC,oBAAoBA,CAACC,KAAoB,EAAEC,MAAiB,EAAE;EAC1E,WAAAC,cAAA,CAAAC,OAAA,MAAAD,cAAA,CAAAC,OAAA,MACQF,MAAM,GAAG,IAAAG,aAAI,EAACJ,KAAK,EAAEC,MAAM,CAAC,GAAGD,KAAK,GACrCA,KAAK,CAACK,MAAM;AAEvB;AAEO,SAASC,oBAAoBA,CAACN,KAAe,EAAEC,MAAgB,EAAE;EACpE,WAAAC,cAAA,CAAAC,OAAA,MAAAD,cAAA,CAAAC,OAAA,MAAY,IAAAC,aAAI,EAACJ,KAAK,EAAEC,MAAM,CAAC,GAAKD,KAAK,CAACK,MAAM;AACpD;AAEO,SAASE,oBAAoBA,CAACP,KAAe,EAAEC,MAAgB,EAAE;EACpE,WAAAC,cAAA,CAAAC,OAAA,MAAAD,cAAA,CAAAC,OAAA,MAAY,IAAAC,aAAI,EAACJ,KAAK,EAAEC,MAAM,CAAC;IAAEO,EAAE,EAAER,KAAK,CAACS;EAAO,GAAKT,KAAK,CAACK,MAAM;AACvE"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Folder } from "../folder/folder.types";
|
|
2
2
|
interface GetFolderAndItsAncestorsParams {
|
|
3
|
-
|
|
3
|
+
folder: Folder;
|
|
4
4
|
folders: Folder[];
|
|
5
5
|
}
|
|
6
|
-
export declare const getFolderAndItsAncestors: ({
|
|
6
|
+
export declare const getFolderAndItsAncestors: ({ folder, folders }: GetFolderAndItsAncestorsParams) => Folder[];
|
|
7
7
|
export {};
|
|
@@ -5,32 +5,35 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.getFolderAndItsAncestors = void 0;
|
|
7
7
|
const getFolderAndItsAncestors = ({
|
|
8
|
-
|
|
8
|
+
folder,
|
|
9
9
|
folders
|
|
10
10
|
}) => {
|
|
11
11
|
// Create a Map with folders, using folder.id as key
|
|
12
12
|
const folderMap = new Map();
|
|
13
13
|
folders.forEach(folder => folderMap.set(folder.id, folder));
|
|
14
|
-
const findParents = (next,
|
|
15
|
-
const folder = folderMap.get(id);
|
|
16
|
-
|
|
14
|
+
const findParents = (next, current) => {
|
|
17
15
|
// No folder found: return the result
|
|
18
|
-
if (!
|
|
16
|
+
if (!current) {
|
|
19
17
|
return next;
|
|
20
18
|
}
|
|
21
19
|
|
|
22
20
|
// Push the current folder into the accumulator array
|
|
23
|
-
next.push(
|
|
21
|
+
next.push(current);
|
|
24
22
|
|
|
25
23
|
// No parentId found: return the result
|
|
26
|
-
if (!
|
|
24
|
+
if (!current.parentId) {
|
|
25
|
+
return next;
|
|
26
|
+
}
|
|
27
|
+
const parent = folderMap.get(current.parentId);
|
|
28
|
+
|
|
29
|
+
// No parent found: return the result
|
|
30
|
+
if (!parent) {
|
|
27
31
|
return next;
|
|
28
32
|
}
|
|
29
33
|
|
|
30
34
|
// Go ahead and find parent for the current parent
|
|
31
|
-
return findParents(next,
|
|
35
|
+
return findParents(next, parent);
|
|
32
36
|
};
|
|
33
|
-
const folder = folderMap.get(id);
|
|
34
37
|
|
|
35
38
|
// No folder found: return an empty array
|
|
36
39
|
if (!folder) {
|
|
@@ -43,6 +46,8 @@ const getFolderAndItsAncestors = ({
|
|
|
43
46
|
}
|
|
44
47
|
|
|
45
48
|
// Recursively find parents for a given folder id
|
|
46
|
-
return findParents([],
|
|
49
|
+
return findParents([], folder);
|
|
47
50
|
};
|
|
48
|
-
exports.getFolderAndItsAncestors = getFolderAndItsAncestors;
|
|
51
|
+
exports.getFolderAndItsAncestors = getFolderAndItsAncestors;
|
|
52
|
+
|
|
53
|
+
//# sourceMappingURL=getFolderAndItsAncestors.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["getFolderAndItsAncestors","
|
|
1
|
+
{"version":3,"names":["getFolderAndItsAncestors","folder","folders","folderMap","Map","forEach","set","id","findParents","next","current","push","parentId","parent","get","exports"],"sources":["getFolderAndItsAncestors.ts"],"sourcesContent":["import { Folder } from \"~/folder/folder.types\";\n\ninterface GetFolderAndItsAncestorsParams {\n folder: Folder;\n folders: Folder[];\n}\n\nexport const getFolderAndItsAncestors = ({\n folder,\n folders\n}: GetFolderAndItsAncestorsParams): Folder[] => {\n // Create a Map with folders, using folder.id as key\n const folderMap = new Map<string, Folder>();\n folders.forEach(folder => folderMap.set(folder.id, folder));\n\n const findParents = (next: Folder[], current: Folder): Folder[] => {\n // No folder found: return the result\n if (!current) {\n return next;\n }\n\n // Push the current folder into the accumulator array\n next.push(current);\n\n // No parentId found: return the result\n if (!current.parentId) {\n return next;\n }\n\n const parent = folderMap.get(current.parentId);\n\n // No parent found: return the result\n if (!parent) {\n return next;\n }\n\n // Go ahead and find parent for the current parent\n return findParents(next, parent);\n };\n\n // No folder found: return an empty array\n if (!folder) {\n return [];\n }\n\n // The folder has no parent (it's at root level): return an array with the folder\n if (!folder.parentId) {\n return [folder];\n }\n\n // Recursively find parents for a given folder id\n return findParents([], folder);\n};\n"],"mappings":";;;;;;AAOO,MAAMA,wBAAwB,GAAGA,CAAC;EACrCC,MAAM;EACNC;AAC4B,CAAC,KAAe;EAC5C;EACA,MAAMC,SAAS,GAAG,IAAIC,GAAG,CAAiB,CAAC;EAC3CF,OAAO,CAACG,OAAO,CAACJ,MAAM,IAAIE,SAAS,CAACG,GAAG,CAACL,MAAM,CAACM,EAAE,EAAEN,MAAM,CAAC,CAAC;EAE3D,MAAMO,WAAW,GAAGA,CAACC,IAAc,EAAEC,OAAe,KAAe;IAC/D;IACA,IAAI,CAACA,OAAO,EAAE;MACV,OAAOD,IAAI;IACf;;IAEA;IACAA,IAAI,CAACE,IAAI,CAACD,OAAO,CAAC;;IAElB;IACA,IAAI,CAACA,OAAO,CAACE,QAAQ,EAAE;MACnB,OAAOH,IAAI;IACf;IAEA,MAAMI,MAAM,GAAGV,SAAS,CAACW,GAAG,CAACJ,OAAO,CAACE,QAAQ,CAAC;;IAE9C;IACA,IAAI,CAACC,MAAM,EAAE;MACT,OAAOJ,IAAI;IACf;;IAEA;IACA,OAAOD,WAAW,CAACC,IAAI,EAAEI,MAAM,CAAC;EACpC,CAAC;;EAED;EACA,IAAI,CAACZ,MAAM,EAAE;IACT,OAAO,EAAE;EACb;;EAEA;EACA,IAAI,CAACA,MAAM,CAACW,QAAQ,EAAE;IAClB,OAAO,CAACX,MAAM,CAAC;EACnB;;EAEA;EACA,OAAOO,WAAW,CAAC,EAAE,EAAEP,MAAM,CAAC;AAClC,CAAC;AAACc,OAAA,CAAAf,wBAAA,GAAAA,wBAAA"}
|
package/utils/modelFactory.js
CHANGED
package/utils/resolve.js
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["_error","_interopRequireDefault","require","throwDeleteError","folder","WebinyError","onFolderBeforeDeleteHook","aco","onFolderBeforeDelete","subscribe","id","type","children","list","where","parentId","limit","length","app","undefined","getApp","records","search","location","folderId","error","from","message","code","exports"],"sources":["onFolderBeforeDelete.hook.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport { AcoContext, Folder, IAcoApp } from \"~/types\";\n\nconst throwDeleteError = (folder: Folder) => {\n throw new WebinyError(\n \"Error: delete all child folders and entries before proceeding.\",\n \"DELETE_FOLDER_WITH_CHILDREN\",\n {\n folder\n }\n );\n};\n\nexport const onFolderBeforeDeleteHook = ({ aco }: AcoContext) => {\n aco.folder.onFolderBeforeDelete.subscribe(async ({ folder }) => {\n try {\n const { id, type } = folder;\n /**\n * First we check for the child folders.\n */\n const [children] = await aco.folder.list({\n where: {\n type,\n parentId: id\n },\n limit: 1\n });\n if (children.length > 0) {\n throwDeleteError(folder);\n }\n\n let app: IAcoApp | undefined = undefined;\n try {\n app = aco.getApp(type);\n } catch {\n return;\n }\n const [records] = await app.search.list({\n where: {\n type,\n location: {\n folderId: id\n }\n },\n limit: 1\n });\n if (records.length === 0) {\n return;\n }\n throwDeleteError(folder);\n } catch (error) {\n throw WebinyError.from(error, {\n message: \"Error while executing onFolderBeforeDelete hook\",\n code: \"ACO_BEFORE_FOLDER_DELETE_HOOK\"\n });\n }\n });\n};\n"],"mappings":";;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AAGA,MAAMC,gBAAgB,GAAIC,MAAc,IAAK;EACzC,MAAM,IAAIC,cAAW,CACjB,gEAAgE,EAChE,6BAA6B,EAC7B;IACID;EACJ,CACJ,CAAC;AACL,CAAC;AAEM,MAAME,wBAAwB,GAAGA,CAAC;EAAEC;AAAgB,CAAC,KAAK;EAC7DA,GAAG,CAACH,MAAM,CAACI,oBAAoB,CAACC,SAAS,CAAC,OAAO;IAAEL;EAAO,CAAC,KAAK;IAC5D,IAAI;MACA,MAAM;QAAEM,EAAE;QAAEC;MAAK,CAAC,GAAGP,MAAM;MAC3B;AACZ;AACA;MACY,MAAM,CAACQ,QAAQ,CAAC,GAAG,MAAML,GAAG,CAACH,MAAM,CAACS,IAAI,CAAC;QACrCC,KAAK,EAAE;UACHH,IAAI;UACJI,QAAQ,EAAEL;QACd,CAAC;QACDM,KAAK,EAAE;MACX,CAAC,CAAC;MACF,IAAIJ,QAAQ,CAACK,MAAM,GAAG,CAAC,EAAE;QACrBd,gBAAgB,CAACC,MAAM,CAAC;MAC5B;MAEA,IAAIc,GAAwB,GAAGC,SAAS;MACxC,IAAI;QACAD,GAAG,GAAGX,GAAG,CAACa,MAAM,CAACT,IAAI,CAAC;MAC1B,CAAC,CAAC,MAAM;QACJ;MACJ;MACA,MAAM,CAACU,OAAO,CAAC,GAAG,MAAMH,GAAG,CAACI,MAAM,CAACT,IAAI,CAAC;QACpCC,KAAK,EAAE;UACHH,IAAI;UACJY,QAAQ,EAAE;YACNC,QAAQ,EAAEd;UACd;QACJ,CAAC;QACDM,KAAK,EAAE;MACX,CAAC,CAAC;MACF,IAAIK,OAAO,CAACJ,MAAM,KAAK,CAAC,EAAE;QACtB;MACJ;MACAd,gBAAgB,CAACC,MAAM,CAAC;IAC5B,CAAC,CAAC,OAAOqB,KAAK,EAAE;MACZ,MAAMpB,cAAW,CAACqB,IAAI,CAACD,KAAK,EAAE;QAC1BE,OAAO,EAAE,iDAAiD;QAC1DC,IAAI,EAAE;MACV,CAAC,CAAC;IACN;EACJ,CAAC,CAAC;AACN,CAAC;AAACC,OAAA,CAAAvB,wBAAA,GAAAA,wBAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["_apiSecurity","require","checkPermissions","context","identity","security","getIdentity","NotAuthorizedError","exports"],"sources":["checkPermissions.ts"],"sourcesContent":["import { NotAuthorizedError } from \"@webiny/api-security\";\nimport { AcoContext } from \"~/types\";\n\nexport const checkPermissions = (context: AcoContext) => {\n const identity = context.security.getIdentity();\n if (!identity) {\n throw new NotAuthorizedError();\n }\n};\n"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAGO,MAAMC,gBAAgB,GAAIC,OAAmB,IAAK;EACrD,MAAMC,QAAQ,GAAGD,OAAO,CAACE,QAAQ,CAACC,WAAW,CAAC,CAAC;EAC/C,IAAI,CAACF,QAAQ,EAAE;IACX,MAAM,IAAIG,+BAAkB,CAAC,CAAC;EAClC;AACJ,CAAC;AAACC,OAAA,CAAAN,gBAAA,GAAAA,gBAAA"}
|