@strapi/content-manager 5.0.0-rc.8 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_chunks/{ComponentConfigurationPage-D0dyDTwq.mjs → ComponentConfigurationPage-DfFSZQxe.mjs} +3 -3
- package/dist/_chunks/{ComponentConfigurationPage-D0dyDTwq.mjs.map → ComponentConfigurationPage-DfFSZQxe.mjs.map} +1 -1
- package/dist/_chunks/{ComponentConfigurationPage-DL1MHO8i.js → ComponentConfigurationPage-FqfsxQ1j.js} +3 -3
- package/dist/_chunks/{ComponentConfigurationPage-DL1MHO8i.js.map → ComponentConfigurationPage-FqfsxQ1j.js.map} +1 -1
- package/dist/_chunks/{EditConfigurationPage-CMaOf-A-.js → EditConfigurationPage-Cn0e8t3I.js} +3 -3
- package/dist/_chunks/{EditConfigurationPage-CMaOf-A-.js.map → EditConfigurationPage-Cn0e8t3I.js.map} +1 -1
- package/dist/_chunks/{EditConfigurationPage-13b7S5Cq.mjs → EditConfigurationPage-DdPNAbl3.mjs} +3 -3
- package/dist/_chunks/{EditConfigurationPage-13b7S5Cq.mjs.map → EditConfigurationPage-DdPNAbl3.mjs.map} +1 -1
- package/dist/_chunks/{EditViewPage-C3tIZ8F5.mjs → EditViewPage-B82x_x1b.mjs} +30 -9
- package/dist/_chunks/EditViewPage-B82x_x1b.mjs.map +1 -0
- package/dist/_chunks/{EditViewPage-BSVmMpRd.js → EditViewPage-DlxEHhUt.js} +30 -9
- package/dist/_chunks/EditViewPage-DlxEHhUt.js.map +1 -0
- package/dist/_chunks/{Field-DUCVth4C.js → Field-COL25JiC.js} +174 -102
- package/dist/_chunks/Field-COL25JiC.js.map +1 -0
- package/dist/_chunks/{Field-BvuT8cGL.mjs → Field-DufHXW17.mjs} +172 -100
- package/dist/_chunks/Field-DufHXW17.mjs.map +1 -0
- package/dist/_chunks/{Form-Cpl4W1ak.js → Form-BssUwrTO.js} +36 -17
- package/dist/_chunks/Form-BssUwrTO.js.map +1 -0
- package/dist/_chunks/{Form-BZmDNVr9.mjs → Form-u_kAOhwB.mjs} +36 -17
- package/dist/_chunks/Form-u_kAOhwB.mjs.map +1 -0
- package/dist/_chunks/{History-D4U2YISB.js → History-C9t9UqpO.js} +23 -10
- package/dist/_chunks/History-C9t9UqpO.js.map +1 -0
- package/dist/_chunks/{History-Cq_Hrzuu.mjs → History-DRwA3oMM.mjs} +24 -11
- package/dist/_chunks/History-DRwA3oMM.mjs.map +1 -0
- package/dist/_chunks/{ListConfigurationPage-Bny6CdWe.js → ListConfigurationPage-BXYPohh-.js} +14 -4
- package/dist/_chunks/ListConfigurationPage-BXYPohh-.js.map +1 -0
- package/dist/_chunks/{ListConfigurationPage-W-KQHmBv.mjs → ListConfigurationPage-BxfQJzPk.mjs} +14 -4
- package/dist/_chunks/ListConfigurationPage-BxfQJzPk.mjs.map +1 -0
- package/dist/_chunks/{ListViewPage-HBBnJa8K.mjs → ListViewPage-CELx2ysp.mjs} +40 -36
- package/dist/_chunks/ListViewPage-CELx2ysp.mjs.map +1 -0
- package/dist/_chunks/{ListViewPage-O8F1pBJo.js → ListViewPage-D2VD8Szg.js} +43 -39
- package/dist/_chunks/ListViewPage-D2VD8Szg.js.map +1 -0
- package/dist/_chunks/{NoContentTypePage-CQWChGPw.js → NoContentTypePage-BV9IjJSM.js} +2 -2
- package/dist/_chunks/{NoContentTypePage-CQWChGPw.js.map → NoContentTypePage-BV9IjJSM.js.map} +1 -1
- package/dist/_chunks/{NoContentTypePage-B-gIhHWM.mjs → NoContentTypePage-DtJ9jcfk.mjs} +2 -2
- package/dist/_chunks/{NoContentTypePage-B-gIhHWM.mjs.map → NoContentTypePage-DtJ9jcfk.mjs.map} +1 -1
- package/dist/_chunks/{NoPermissionsPage-XhOPl8wx.mjs → NoPermissionsPage-DWleVYK7.mjs} +2 -2
- package/dist/_chunks/{NoPermissionsPage-XhOPl8wx.mjs.map → NoPermissionsPage-DWleVYK7.mjs.map} +1 -1
- package/dist/_chunks/{NoPermissionsPage-CY46zxnM.js → NoPermissionsPage-Dp8NpF9I.js} +2 -2
- package/dist/_chunks/{NoPermissionsPage-CY46zxnM.js.map → NoPermissionsPage-Dp8NpF9I.js.map} +1 -1
- package/dist/_chunks/{Relations-vFZ6Wasg.mjs → Relations-BTcf5xaw.mjs} +33 -24
- package/dist/_chunks/Relations-BTcf5xaw.mjs.map +1 -0
- package/dist/_chunks/{Relations-C4gGfZRv.js → Relations-DR7EUgyC.js} +33 -24
- package/dist/_chunks/Relations-DR7EUgyC.js.map +1 -0
- package/dist/_chunks/{en-uOUIxfcQ.js → en-Bm0D0IWz.js} +13 -12
- package/dist/_chunks/{en-uOUIxfcQ.js.map → en-Bm0D0IWz.js.map} +1 -1
- package/dist/_chunks/{en-BrCTWlZv.mjs → en-DKV44jRb.mjs} +13 -12
- package/dist/_chunks/{en-BrCTWlZv.mjs.map → en-DKV44jRb.mjs.map} +1 -1
- package/dist/_chunks/{index-5EMXLEM_.js → index-BdMf2lfT.js} +1899 -1742
- package/dist/_chunks/index-BdMf2lfT.js.map +1 -0
- package/dist/_chunks/{index-Dpxg3ctD.mjs → index-wnqzm4Q8.mjs} +1919 -1762
- package/dist/_chunks/index-wnqzm4Q8.mjs.map +1 -0
- package/dist/_chunks/{layout-C0INpKap.mjs → layout-2CfjL0T9.mjs} +8 -7
- package/dist/_chunks/layout-2CfjL0T9.mjs.map +1 -0
- package/dist/_chunks/{layout-P3eKO1Qy.js → layout-B2MyZU-_.js} +8 -7
- package/dist/_chunks/layout-B2MyZU-_.js.map +1 -0
- package/dist/_chunks/{relations-B1y0K6LE.js → relations-BH7JJGGe.js} +2 -2
- package/dist/_chunks/{relations-B1y0K6LE.js.map → relations-BH7JJGGe.js.map} +1 -1
- package/dist/_chunks/{relations-FBRRBWeO.mjs → relations-C0w0GcXi.mjs} +2 -2
- package/dist/_chunks/{relations-FBRRBWeO.mjs.map → relations-C0w0GcXi.mjs.map} +1 -1
- package/dist/_chunks/{usePrev-B9w_-eYc.js → useDebounce-CtcjDB3L.js} +14 -1
- package/dist/_chunks/useDebounce-CtcjDB3L.js.map +1 -0
- package/dist/_chunks/useDebounce-DmuSJIF3.mjs +29 -0
- package/dist/_chunks/useDebounce-DmuSJIF3.mjs.map +1 -0
- package/dist/admin/index.js +2 -1
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +5 -4
- package/dist/admin/src/exports.d.ts +1 -1
- package/dist/admin/src/history/services/historyVersion.d.ts +1 -1
- package/dist/admin/src/hooks/useDocument.d.ts +32 -1
- package/dist/admin/src/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.d.ts +2 -2
- package/dist/admin/src/pages/EditView/components/FormInputs/Wysiwyg/WysiwygFooter.d.ts +2 -2
- package/dist/admin/src/pages/EditView/components/FormInputs/Wysiwyg/WysiwygStyles.d.ts +4 -48
- package/dist/admin/src/pages/EditView/components/Header.d.ts +11 -11
- package/dist/admin/src/services/api.d.ts +1 -1
- package/dist/admin/src/services/components.d.ts +2 -2
- package/dist/admin/src/services/contentTypes.d.ts +3 -3
- package/dist/admin/src/services/documents.d.ts +19 -17
- package/dist/admin/src/services/init.d.ts +1 -1
- package/dist/admin/src/services/relations.d.ts +2 -2
- package/dist/admin/src/services/uid.d.ts +3 -3
- package/dist/admin/src/utils/validation.d.ts +4 -1
- package/dist/server/index.js +77 -39
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +77 -39
- package/dist/server/index.mjs.map +1 -1
- package/dist/server/src/controllers/collection-types.d.ts.map +1 -1
- package/dist/server/src/controllers/relations.d.ts.map +1 -1
- package/dist/server/src/history/services/history.d.ts.map +1 -1
- package/dist/server/src/history/services/lifecycles.d.ts.map +1 -1
- package/dist/server/src/history/services/utils.d.ts +1 -0
- package/dist/server/src/history/services/utils.d.ts.map +1 -1
- package/dist/server/src/policies/hasPermissions.d.ts.map +1 -1
- package/dist/server/src/services/permission-checker.d.ts.map +1 -1
- package/dist/shared/contracts/collection-types.d.ts +3 -1
- package/dist/shared/contracts/collection-types.d.ts.map +1 -1
- package/package.json +12 -12
- package/dist/_chunks/EditViewPage-BSVmMpRd.js.map +0 -1
- package/dist/_chunks/EditViewPage-C3tIZ8F5.mjs.map +0 -1
- package/dist/_chunks/Field-BvuT8cGL.mjs.map +0 -1
- package/dist/_chunks/Field-DUCVth4C.js.map +0 -1
- package/dist/_chunks/Form-BZmDNVr9.mjs.map +0 -1
- package/dist/_chunks/Form-Cpl4W1ak.js.map +0 -1
- package/dist/_chunks/History-Cq_Hrzuu.mjs.map +0 -1
- package/dist/_chunks/History-D4U2YISB.js.map +0 -1
- package/dist/_chunks/ListConfigurationPage-Bny6CdWe.js.map +0 -1
- package/dist/_chunks/ListConfigurationPage-W-KQHmBv.mjs.map +0 -1
- package/dist/_chunks/ListViewPage-HBBnJa8K.mjs.map +0 -1
- package/dist/_chunks/ListViewPage-O8F1pBJo.js.map +0 -1
- package/dist/_chunks/Relations-C4gGfZRv.js.map +0 -1
- package/dist/_chunks/Relations-vFZ6Wasg.mjs.map +0 -1
- package/dist/_chunks/index-5EMXLEM_.js.map +0 -1
- package/dist/_chunks/index-Dpxg3ctD.mjs.map +0 -1
- package/dist/_chunks/layout-C0INpKap.mjs.map +0 -1
- package/dist/_chunks/layout-P3eKO1Qy.js.map +0 -1
- package/dist/_chunks/usePrev-B9w_-eYc.js.map +0 -1
- package/dist/_chunks/usePrev-DH6iah0A.mjs +0 -16
- package/dist/_chunks/usePrev-DH6iah0A.mjs.map +0 -1
- package/strapi-server.js +0 -3
package/dist/server/index.js
CHANGED
@@ -199,7 +199,9 @@ const createServiceUtils = ({ strapi: strapi2 }) => {
|
|
199
199
|
return strapi2.db.query("plugin::upload.file").findOne({ where: { id: versionRelationData.id } });
|
200
200
|
};
|
201
201
|
const localesService = strapi2.plugin("i18n")?.service("locales");
|
202
|
+
const i18nContentTypeService = strapi2.plugin("i18n")?.service("content-types");
|
202
203
|
const getDefaultLocale = async () => localesService ? localesService.getDefaultLocale() : null;
|
204
|
+
const isLocalizedContentType = (model) => i18nContentTypeService ? i18nContentTypeService.isLocalizedContentType(model) : false;
|
203
205
|
const getLocaleDictionary = async () => {
|
204
206
|
if (!localesService)
|
205
207
|
return {};
|
@@ -317,6 +319,7 @@ const createServiceUtils = ({ strapi: strapi2 }) => {
|
|
317
319
|
getRelationRestoreValue,
|
318
320
|
getMediaRestoreValue,
|
319
321
|
getDefaultLocale,
|
322
|
+
isLocalizedContentType,
|
320
323
|
getLocaleDictionary,
|
321
324
|
getRetentionDays,
|
322
325
|
getVersionStatus,
|
@@ -339,7 +342,13 @@ const createHistoryService = ({ strapi: strapi2 }) => {
|
|
339
342
|
});
|
340
343
|
},
|
341
344
|
async findVersionsPage(params) {
|
342
|
-
const
|
345
|
+
const model = strapi2.getModel(params.query.contentType);
|
346
|
+
const isLocalizedContentType = serviceUtils.isLocalizedContentType(model);
|
347
|
+
const defaultLocale = await serviceUtils.getDefaultLocale();
|
348
|
+
let locale = null;
|
349
|
+
if (isLocalizedContentType) {
|
350
|
+
locale = params.query.locale || defaultLocale;
|
351
|
+
}
|
343
352
|
const [{ results, pagination }, localeDictionary] = await Promise.all([
|
344
353
|
query.findPage({
|
345
354
|
...params.query,
|
@@ -384,7 +393,12 @@ const createHistoryService = ({ strapi: strapi2 }) => {
|
|
384
393
|
if (userToPopulate == null) {
|
385
394
|
return null;
|
386
395
|
}
|
387
|
-
return strapi2.query("admin::user").findOne({
|
396
|
+
return strapi2.query("admin::user").findOne({
|
397
|
+
where: {
|
398
|
+
...userToPopulate.id ? { id: userToPopulate.id } : {},
|
399
|
+
...userToPopulate.documentId ? { documentId: userToPopulate.documentId } : {}
|
400
|
+
}
|
401
|
+
});
|
388
402
|
})
|
389
403
|
);
|
390
404
|
return {
|
@@ -555,11 +569,13 @@ const createLifecyclesService = ({ strapi: strapi2 }) => {
|
|
555
569
|
}
|
556
570
|
const uid2 = context.contentType.uid;
|
557
571
|
const schemas = getSchemas(uid2);
|
572
|
+
const model = strapi2.getModel(uid2);
|
573
|
+
const isLocalizedContentType = serviceUtils.isLocalizedContentType(model);
|
558
574
|
const localeEntries = await strapi2.db.query(uid2).findMany({
|
559
575
|
where: {
|
560
576
|
documentId,
|
561
|
-
locale: { $in: locales },
|
562
|
-
publishedAt: null
|
577
|
+
...isLocalizedContentType ? { locale: { $in: locales } } : {},
|
578
|
+
...strapiUtils.contentTypes.hasDraftAndPublish(strapi2.contentTypes[uid2]) ? { publishedAt: null } : {}
|
563
579
|
},
|
564
580
|
populate: serviceUtils.getDeepPopulate(
|
565
581
|
uid2,
|
@@ -1219,6 +1235,11 @@ const { createPolicy } = strapiUtils.policy;
|
|
1219
1235
|
const hasPermissions = createPolicy({
|
1220
1236
|
name: "plugin::content-manager.hasPermissions",
|
1221
1237
|
validator: validateHasPermissionsInput,
|
1238
|
+
/**
|
1239
|
+
* NOTE: Action aliases are currently not checked at this level (policy).
|
1240
|
+
* This is currently the intended behavior to avoid changing the behavior of API related permissions.
|
1241
|
+
* If you want to add support for it, please create a dedicated RFC with a list of potential side effect this could have.
|
1242
|
+
*/
|
1222
1243
|
handler(ctx, config = {}) {
|
1223
1244
|
const { actions = [], hasAtLeastOne = false } = config;
|
1224
1245
|
const { userAbility } = ctx.state;
|
@@ -1699,7 +1720,7 @@ const updateDocument = async (ctx, opts) => {
|
|
1699
1720
|
throw new strapiUtils.errors.ForbiddenError();
|
1700
1721
|
}
|
1701
1722
|
const pickPermittedFields = documentVersion ? permissionChecker2.sanitizeUpdateInput(documentVersion) : permissionChecker2.sanitizeCreateInput;
|
1702
|
-
const setCreator = strapiUtils.setCreatorFields({ user, isEdition: true });
|
1723
|
+
const setCreator = documentVersion ? strapiUtils.setCreatorFields({ user, isEdition: true }) : strapiUtils.setCreatorFields({ user });
|
1703
1724
|
const sanitizeFn = strapiUtils.async.pipe(pickPermittedFields, setCreator);
|
1704
1725
|
const sanitizedBody = await sanitizeFn(body);
|
1705
1726
|
return documentManager2.update(documentVersion?.documentId || id, model, {
|
@@ -1771,7 +1792,7 @@ const collectionTypes = {
|
|
1771
1792
|
permissionChecker2,
|
1772
1793
|
model,
|
1773
1794
|
// @ts-expect-error TODO: fix
|
1774
|
-
{ id, locale, publishedAt: null },
|
1795
|
+
{ documentId: id, locale, publishedAt: null },
|
1775
1796
|
{ availableLocales: true, availableStatus: false }
|
1776
1797
|
);
|
1777
1798
|
ctx.body = { data: {}, meta };
|
@@ -1908,11 +1929,17 @@ const collectionTypes = {
|
|
1908
1929
|
}
|
1909
1930
|
const isUpdate = !isCreate;
|
1910
1931
|
if (isUpdate) {
|
1911
|
-
|
1912
|
-
if (!
|
1932
|
+
const documentExists = documentManager2.exists(model, id);
|
1933
|
+
if (!documentExists) {
|
1913
1934
|
throw new strapiUtils.errors.NotFoundError("Document not found");
|
1914
1935
|
}
|
1915
|
-
|
1936
|
+
document = await documentManager2.findOne(id, model, { populate, locale });
|
1937
|
+
if (!document) {
|
1938
|
+
if (permissionChecker2.cannot.create({ locale }) || permissionChecker2.cannot.publish({ locale })) {
|
1939
|
+
throw new strapiUtils.errors.ForbiddenError();
|
1940
|
+
}
|
1941
|
+
document = await updateDocument(ctx);
|
1942
|
+
} else if (permissionChecker2.can.update(document)) {
|
1916
1943
|
await updateDocument(ctx);
|
1917
1944
|
}
|
1918
1945
|
}
|
@@ -1974,7 +2001,9 @@ const collectionTypes = {
|
|
1974
2001
|
if (permissionChecker2.cannot.unpublish()) {
|
1975
2002
|
return ctx.forbidden();
|
1976
2003
|
}
|
1977
|
-
const { locale } = await getDocumentLocaleAndStatus(body, model
|
2004
|
+
const { locale } = await getDocumentLocaleAndStatus(body, model, {
|
2005
|
+
allowMultipleLocales: true
|
2006
|
+
});
|
1978
2007
|
const entityPromises = documentIds.map(
|
1979
2008
|
(documentId) => documentManager2.findLocales(documentId, model, { locale, isPublished: true })
|
1980
2009
|
);
|
@@ -2325,20 +2354,13 @@ const sanitizeMainField = (model, mainField, userAbility) => {
|
|
2325
2354
|
userAbility,
|
2326
2355
|
model: model.uid
|
2327
2356
|
});
|
2328
|
-
|
2357
|
+
const isMainFieldListable = isListable(model, mainField);
|
2358
|
+
const canReadMainField = permissionChecker2.can.read(null, mainField);
|
2359
|
+
if (!isMainFieldListable || !canReadMainField) {
|
2329
2360
|
return "id";
|
2330
2361
|
}
|
2331
|
-
if (
|
2332
|
-
|
2333
|
-
const userPermissionChecker = getService$1("permission-checker").create({
|
2334
|
-
userAbility,
|
2335
|
-
model: "plugin::users-permissions.user"
|
2336
|
-
});
|
2337
|
-
if (userPermissionChecker.can.read()) {
|
2338
|
-
return "name";
|
2339
|
-
}
|
2340
|
-
}
|
2341
|
-
return "id";
|
2362
|
+
if (model.uid === "plugin::users-permissions.role") {
|
2363
|
+
return "name";
|
2342
2364
|
}
|
2343
2365
|
return mainField;
|
2344
2366
|
};
|
@@ -2371,11 +2393,8 @@ const validateLocale = (sourceUid, targetUid, locale) => {
|
|
2371
2393
|
const isLocalized = strapi.plugin("i18n").service("content-types").isLocalizedContentType;
|
2372
2394
|
const isSourceLocalized = isLocalized(sourceModel);
|
2373
2395
|
const isTargetLocalized = isLocalized(targetModel);
|
2374
|
-
let validatedLocale = locale;
|
2375
|
-
if (!targetModel || !isTargetLocalized)
|
2376
|
-
validatedLocale = void 0;
|
2377
2396
|
return {
|
2378
|
-
locale
|
2397
|
+
locale,
|
2379
2398
|
isSourceLocalized,
|
2380
2399
|
isTargetLocalized
|
2381
2400
|
};
|
@@ -2478,7 +2497,7 @@ const relations = {
|
|
2478
2497
|
attribute,
|
2479
2498
|
fieldsToSelect,
|
2480
2499
|
mainField,
|
2481
|
-
source: { schema: sourceSchema },
|
2500
|
+
source: { schema: sourceSchema, isLocalized: isSourceLocalized },
|
2482
2501
|
target: { schema: targetSchema, isLocalized: isTargetLocalized },
|
2483
2502
|
sourceSchema,
|
2484
2503
|
targetSchema,
|
@@ -2500,7 +2519,8 @@ const relations = {
|
|
2500
2519
|
fieldsToSelect,
|
2501
2520
|
mainField,
|
2502
2521
|
source: {
|
2503
|
-
schema: { uid: sourceUid, modelType: sourceModelType }
|
2522
|
+
schema: { uid: sourceUid, modelType: sourceModelType },
|
2523
|
+
isLocalized: isSourceLocalized
|
2504
2524
|
},
|
2505
2525
|
target: {
|
2506
2526
|
schema: { uid: targetUid },
|
@@ -2538,12 +2558,16 @@ const relations = {
|
|
2538
2558
|
} else {
|
2539
2559
|
where.id = id;
|
2540
2560
|
}
|
2541
|
-
|
2542
|
-
|
2561
|
+
const publishedAt = getPublishedAtClause(status, targetUid);
|
2562
|
+
if (!fp.isEmpty(publishedAt)) {
|
2563
|
+
where[`${alias}.published_at`] = publishedAt;
|
2543
2564
|
}
|
2544
|
-
if (
|
2565
|
+
if (isTargetLocalized && locale) {
|
2545
2566
|
where[`${alias}.locale`] = locale;
|
2546
2567
|
}
|
2568
|
+
if (isSourceLocalized && locale) {
|
2569
|
+
where.locale = locale;
|
2570
|
+
}
|
2547
2571
|
if ((idsToInclude?.length ?? 0) !== 0) {
|
2548
2572
|
where[`${alias}.id`].$notIn = idsToInclude;
|
2549
2573
|
}
|
@@ -2561,7 +2585,8 @@ const relations = {
|
|
2561
2585
|
id: { $notIn: fp.uniq(idsToOmit) }
|
2562
2586
|
});
|
2563
2587
|
}
|
2564
|
-
const
|
2588
|
+
const dbQuery = strapi.get("query-params").transform(targetUid, queryParams);
|
2589
|
+
const res = await strapi.db.query(targetUid).findPage(dbQuery);
|
2565
2590
|
ctx.body = {
|
2566
2591
|
...res,
|
2567
2592
|
results: await addStatusToRelations(targetUid, res.results)
|
@@ -2596,9 +2621,7 @@ const relations = {
|
|
2596
2621
|
addFiltersClause(permissionQuery, { id: { $in: loadedIds } });
|
2597
2622
|
const sanitizedRes = await loadRelations({ id: entryId }, targetField, {
|
2598
2623
|
...strapi.get("query-params").transform(targetUid, permissionQuery),
|
2599
|
-
ordering: "desc"
|
2600
|
-
page: ctx.request.query.page,
|
2601
|
-
pageSize: ctx.request.query.pageSize
|
2624
|
+
ordering: "desc"
|
2602
2625
|
});
|
2603
2626
|
const relationsUnion = fp.uniqBy("id", fp.concat(sanitizedRes.results, res.results));
|
2604
2627
|
ctx.body = {
|
@@ -2685,7 +2708,7 @@ const singleTypes = {
|
|
2685
2708
|
permissionChecker2,
|
2686
2709
|
model,
|
2687
2710
|
// @ts-expect-error - fix types
|
2688
|
-
{
|
2711
|
+
{ documentId: document.documentId, locale, publishedAt: null },
|
2689
2712
|
{ availableLocales: true, availableStatus: false }
|
2690
2713
|
);
|
2691
2714
|
ctx.body = { data: {}, meta };
|
@@ -3504,12 +3527,27 @@ const createPermissionChecker = (strapi2) => ({ userAbility, model }) => {
|
|
3504
3527
|
ability: userAbility,
|
3505
3528
|
model
|
3506
3529
|
});
|
3507
|
-
const
|
3530
|
+
const { actionProvider } = strapi2.service("admin::permission");
|
3531
|
+
const toSubject = (entity) => {
|
3532
|
+
return entity ? permissionsManager.toSubject(entity, model) : model;
|
3533
|
+
};
|
3508
3534
|
const can = (action, entity, field) => {
|
3509
|
-
|
3535
|
+
const subject = toSubject(entity);
|
3536
|
+
const aliases = actionProvider.unstable_aliases(action, model);
|
3537
|
+
return (
|
3538
|
+
// Test the original action to see if it passes
|
3539
|
+
userAbility.can(action, subject, field) || // Else try every known alias if at least one of them succeed, then the user "can"
|
3540
|
+
aliases.some((alias) => userAbility.can(alias, subject, field))
|
3541
|
+
);
|
3510
3542
|
};
|
3511
3543
|
const cannot = (action, entity, field) => {
|
3512
|
-
|
3544
|
+
const subject = toSubject(entity);
|
3545
|
+
const aliases = actionProvider.unstable_aliases(action, model);
|
3546
|
+
return (
|
3547
|
+
// Test both the original action
|
3548
|
+
userAbility.cannot(action, subject, field) && // and every known alias, if all of them fail (cannot), then the user truly "cannot"
|
3549
|
+
aliases.every((alias) => userAbility.cannot(alias, subject, field))
|
3550
|
+
);
|
3513
3551
|
};
|
3514
3552
|
const sanitizeOutput = (data, { action = ACTIONS.read } = {}) => {
|
3515
3553
|
return permissionsManager.sanitizeOutput(data, { subject: toSubject(data), action });
|