@strapi/content-manager 0.0.0-experimental.5e04dee5c96cd68273df3b3cadf4635e19dc2afc → 0.0.0-experimental.5f6fc3bc1a7d1b7c5fe926a37d4869f00e812287
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-B3yDbeU1.mjs → ComponentConfigurationPage-DJ5voqEK.mjs} +3 -3
- package/dist/_chunks/{ComponentConfigurationPage-B3yDbeU1.mjs.map → ComponentConfigurationPage-DJ5voqEK.mjs.map} +1 -1
- package/dist/_chunks/{ComponentConfigurationPage-KXSuLnQD.js → ComponentConfigurationPage-_6osrv39.js} +3 -3
- package/dist/_chunks/{ComponentConfigurationPage-KXSuLnQD.js.map → ComponentConfigurationPage-_6osrv39.js.map} +1 -1
- package/dist/_chunks/{EditConfigurationPage-D7PrLO8j.mjs → EditConfigurationPage-CZofxSLy.mjs} +3 -3
- package/dist/_chunks/{EditConfigurationPage-D7PrLO8j.mjs.map → EditConfigurationPage-CZofxSLy.mjs.map} +1 -1
- package/dist/_chunks/{EditConfigurationPage-BQ17--5R.js → EditConfigurationPage-ZN3s568V.js} +3 -3
- package/dist/_chunks/{EditConfigurationPage-BQ17--5R.js.map → EditConfigurationPage-ZN3s568V.js.map} +1 -1
- package/dist/_chunks/{EditViewPage-BgjdnGz2.js → EditViewPage-Co2IKQZH.js} +4 -4
- package/dist/_chunks/EditViewPage-Co2IKQZH.js.map +1 -0
- package/dist/_chunks/{EditViewPage-B7VgwJaG.mjs → EditViewPage-HYljoEY7.mjs} +4 -4
- package/dist/_chunks/EditViewPage-HYljoEY7.mjs.map +1 -0
- package/dist/_chunks/{Field-tHCw4lGA.mjs → Field-BOPUMZ1u.mjs} +31 -62
- package/dist/_chunks/Field-BOPUMZ1u.mjs.map +1 -0
- package/dist/_chunks/{Field-CdK7ZLmv.js → Field-G9CkFUtP.js} +34 -65
- package/dist/_chunks/Field-G9CkFUtP.js.map +1 -0
- package/dist/_chunks/{Form-BJxdTv3Q.mjs → Form-CDwNp7pU.mjs} +15 -7
- package/dist/_chunks/Form-CDwNp7pU.mjs.map +1 -0
- package/dist/_chunks/{Form-C_0KTVvV.js → Form-crsbkGxI.js} +15 -7
- package/dist/_chunks/Form-crsbkGxI.js.map +1 -0
- package/dist/_chunks/{History-DR2txJLE.mjs → History-BDZrgfZ3.mjs} +4 -4
- package/dist/_chunks/{History-DR2txJLE.mjs.map → History-BDZrgfZ3.mjs.map} +1 -1
- package/dist/_chunks/{History-nuEzM5qm.js → History-CWcM9HnW.js} +4 -4
- package/dist/_chunks/{History-nuEzM5qm.js.map → History-CWcM9HnW.js.map} +1 -1
- package/dist/_chunks/{ListConfigurationPage-voFVtXu6.mjs → ListConfigurationPage-BZ3ScUna.mjs} +2 -2
- package/dist/_chunks/{ListConfigurationPage-voFVtXu6.mjs.map → ListConfigurationPage-BZ3ScUna.mjs.map} +1 -1
- package/dist/_chunks/{ListConfigurationPage-CnB86Psm.js → ListConfigurationPage-DGzoQD_I.js} +2 -2
- package/dist/_chunks/{ListConfigurationPage-CnB86Psm.js.map → ListConfigurationPage-DGzoQD_I.js.map} +1 -1
- package/dist/_chunks/{ListViewPage-SXIXm-RM.js → ListViewPage-BBAC9aPu.js} +42 -38
- package/dist/_chunks/ListViewPage-BBAC9aPu.js.map +1 -0
- package/dist/_chunks/{ListViewPage-B_GaWgRH.mjs → ListViewPage-CsX7tWx-.mjs} +39 -35
- package/dist/_chunks/ListViewPage-CsX7tWx-.mjs.map +1 -0
- package/dist/_chunks/{NoContentTypePage-BzsQ3hLZ.js → NoContentTypePage-CwVDx_YC.js} +2 -2
- package/dist/_chunks/{NoContentTypePage-BzsQ3hLZ.js.map → NoContentTypePage-CwVDx_YC.js.map} +1 -1
- package/dist/_chunks/{NoContentTypePage-CYiGpsbj.mjs → NoContentTypePage-LClTUPWs.mjs} +2 -2
- package/dist/_chunks/{NoContentTypePage-CYiGpsbj.mjs.map → NoContentTypePage-LClTUPWs.mjs.map} +1 -1
- package/dist/_chunks/{NoPermissionsPage-IGkId4C5.js → NoPermissionsPage-D2iWw-sn.js} +2 -2
- package/dist/_chunks/{NoPermissionsPage-IGkId4C5.js.map → NoPermissionsPage-D2iWw-sn.js.map} +1 -1
- package/dist/_chunks/{NoPermissionsPage-B5baIHal.mjs → NoPermissionsPage-S4Re3FwO.mjs} +2 -2
- package/dist/_chunks/{NoPermissionsPage-B5baIHal.mjs.map → NoPermissionsPage-S4Re3FwO.mjs.map} +1 -1
- package/dist/_chunks/{Relations-CIYDdKU-.mjs → Relations-Dmv0Tpe5.mjs} +3 -3
- package/dist/_chunks/{Relations-CIYDdKU-.mjs.map → Relations-Dmv0Tpe5.mjs.map} +1 -1
- package/dist/_chunks/{Relations-Dhuurpx2.js → Relations-jwuTFGOV.js} +3 -3
- package/dist/_chunks/{Relations-Dhuurpx2.js.map → Relations-jwuTFGOV.js.map} +1 -1
- package/dist/_chunks/{en-uOUIxfcQ.js → en-BlhnxQfj.js} +7 -6
- package/dist/_chunks/{en-uOUIxfcQ.js.map → en-BlhnxQfj.js.map} +1 -1
- package/dist/_chunks/{en-BrCTWlZv.mjs → en-C8YBvRrK.mjs} +7 -6
- package/dist/_chunks/{en-BrCTWlZv.mjs.map → en-C8YBvRrK.mjs.map} +1 -1
- package/dist/_chunks/{index-C9TJPyni.mjs → index-BmUAydCA.mjs} +1032 -914
- package/dist/_chunks/index-BmUAydCA.mjs.map +1 -0
- package/dist/_chunks/{index-CdT0kHZ8.js → index-CBX6KyXv.js} +1012 -894
- package/dist/_chunks/index-CBX6KyXv.js.map +1 -0
- package/dist/_chunks/{layout-BNqvLR_b.mjs → layout-ClP-DC72.mjs} +5 -4
- package/dist/_chunks/{layout-BNqvLR_b.mjs.map → layout-ClP-DC72.mjs.map} +1 -1
- package/dist/_chunks/{layout-C6dxWYT7.js → layout-CxxkX9jY.js} +5 -4
- package/dist/_chunks/{layout-C6dxWYT7.js.map → layout-CxxkX9jY.js.map} +1 -1
- package/dist/_chunks/{relations-DtFaDnP1.js → relations-DIjTADIu.js} +2 -2
- package/dist/_chunks/{relations-DtFaDnP1.js.map → relations-DIjTADIu.js.map} +1 -1
- package/dist/_chunks/{relations-CkKqKw65.mjs → relations-op89RClB.mjs} +2 -2
- package/dist/_chunks/{relations-CkKqKw65.mjs.map → relations-op89RClB.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 +30 -1
- package/dist/admin/src/pages/EditView/components/FormInputs/Wysiwyg/WysiwygStyles.d.ts +0 -32
- package/dist/admin/src/pages/EditView/components/Header.d.ts +10 -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 +50 -25
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +50 -25
- 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 +11 -11
- package/dist/_chunks/EditViewPage-B7VgwJaG.mjs.map +0 -1
- package/dist/_chunks/EditViewPage-BgjdnGz2.js.map +0 -1
- package/dist/_chunks/Field-CdK7ZLmv.js.map +0 -1
- package/dist/_chunks/Field-tHCw4lGA.mjs.map +0 -1
- package/dist/_chunks/Form-BJxdTv3Q.mjs.map +0 -1
- package/dist/_chunks/Form-C_0KTVvV.js.map +0 -1
- package/dist/_chunks/ListViewPage-B_GaWgRH.mjs.map +0 -1
- package/dist/_chunks/ListViewPage-SXIXm-RM.js.map +0 -1
- package/dist/_chunks/index-C9TJPyni.mjs.map +0 -1
- package/dist/_chunks/index-CdT0kHZ8.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,
|
@@ -555,11 +564,13 @@ const createLifecyclesService = ({ strapi: strapi2 }) => {
|
|
555
564
|
}
|
556
565
|
const uid2 = context.contentType.uid;
|
557
566
|
const schemas = getSchemas(uid2);
|
567
|
+
const model = strapi2.getModel(uid2);
|
568
|
+
const isLocalizedContentType = serviceUtils.isLocalizedContentType(model);
|
558
569
|
const localeEntries = await strapi2.db.query(uid2).findMany({
|
559
570
|
where: {
|
560
571
|
documentId,
|
561
|
-
locale: { $in: locales },
|
562
|
-
publishedAt: null
|
572
|
+
...isLocalizedContentType ? { locale: { $in: locales } } : {},
|
573
|
+
...strapiUtils.contentTypes.hasDraftAndPublish(strapi2.contentTypes[uid2]) ? { publishedAt: null } : {}
|
563
574
|
},
|
564
575
|
populate: serviceUtils.getDeepPopulate(
|
565
576
|
uid2,
|
@@ -1219,6 +1230,11 @@ const { createPolicy } = strapiUtils.policy;
|
|
1219
1230
|
const hasPermissions = createPolicy({
|
1220
1231
|
name: "plugin::content-manager.hasPermissions",
|
1221
1232
|
validator: validateHasPermissionsInput,
|
1233
|
+
/**
|
1234
|
+
* NOTE: Action aliases are currently not checked at this level (policy).
|
1235
|
+
* This is currently the intended behavior to avoid changing the behavior of API related permissions.
|
1236
|
+
* If you want to add support for it, please create a dedicated RFC with a list of potential side effect this could have.
|
1237
|
+
*/
|
1222
1238
|
handler(ctx, config = {}) {
|
1223
1239
|
const { actions = [], hasAtLeastOne = false } = config;
|
1224
1240
|
const { userAbility } = ctx.state;
|
@@ -1771,7 +1787,7 @@ const collectionTypes = {
|
|
1771
1787
|
permissionChecker2,
|
1772
1788
|
model,
|
1773
1789
|
// @ts-expect-error TODO: fix
|
1774
|
-
{ id, locale, publishedAt: null },
|
1790
|
+
{ documentId: id, locale, publishedAt: null },
|
1775
1791
|
{ availableLocales: true, availableStatus: false }
|
1776
1792
|
);
|
1777
1793
|
ctx.body = { data: {}, meta };
|
@@ -1974,7 +1990,9 @@ const collectionTypes = {
|
|
1974
1990
|
if (permissionChecker2.cannot.unpublish()) {
|
1975
1991
|
return ctx.forbidden();
|
1976
1992
|
}
|
1977
|
-
const { locale } = await getDocumentLocaleAndStatus(body, model
|
1993
|
+
const { locale } = await getDocumentLocaleAndStatus(body, model, {
|
1994
|
+
allowMultipleLocales: true
|
1995
|
+
});
|
1978
1996
|
const entityPromises = documentIds.map(
|
1979
1997
|
(documentId) => documentManager2.findLocales(documentId, model, { locale, isPublished: true })
|
1980
1998
|
);
|
@@ -2325,20 +2343,13 @@ const sanitizeMainField = (model, mainField, userAbility) => {
|
|
2325
2343
|
userAbility,
|
2326
2344
|
model: model.uid
|
2327
2345
|
});
|
2328
|
-
|
2346
|
+
const isMainFieldListable = isListable(model, mainField);
|
2347
|
+
const canReadMainField = permissionChecker2.can.read(null, mainField);
|
2348
|
+
if (!isMainFieldListable || !canReadMainField) {
|
2329
2349
|
return "id";
|
2330
2350
|
}
|
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";
|
2351
|
+
if (model.uid === "plugin::users-permissions.role") {
|
2352
|
+
return "name";
|
2342
2353
|
}
|
2343
2354
|
return mainField;
|
2344
2355
|
};
|
@@ -2538,8 +2549,9 @@ const relations = {
|
|
2538
2549
|
} else {
|
2539
2550
|
where.id = id;
|
2540
2551
|
}
|
2541
|
-
|
2542
|
-
|
2552
|
+
const publishedAt = getPublishedAtClause(status, targetUid);
|
2553
|
+
if (!fp.isEmpty(publishedAt)) {
|
2554
|
+
where[`${alias}.published_at`] = publishedAt;
|
2543
2555
|
}
|
2544
2556
|
if (filterByLocale) {
|
2545
2557
|
where[`${alias}.locale`] = locale;
|
@@ -2596,9 +2608,7 @@ const relations = {
|
|
2596
2608
|
addFiltersClause(permissionQuery, { id: { $in: loadedIds } });
|
2597
2609
|
const sanitizedRes = await loadRelations({ id: entryId }, targetField, {
|
2598
2610
|
...strapi.get("query-params").transform(targetUid, permissionQuery),
|
2599
|
-
ordering: "desc"
|
2600
|
-
page: ctx.request.query.page,
|
2601
|
-
pageSize: ctx.request.query.pageSize
|
2611
|
+
ordering: "desc"
|
2602
2612
|
});
|
2603
2613
|
const relationsUnion = fp.uniqBy("id", fp.concat(sanitizedRes.results, res.results));
|
2604
2614
|
ctx.body = {
|
@@ -3504,12 +3514,27 @@ const createPermissionChecker = (strapi2) => ({ userAbility, model }) => {
|
|
3504
3514
|
ability: userAbility,
|
3505
3515
|
model
|
3506
3516
|
});
|
3507
|
-
const
|
3517
|
+
const { actionProvider } = strapi2.service("admin::permission");
|
3518
|
+
const toSubject = (entity) => {
|
3519
|
+
return entity ? permissionsManager.toSubject(entity, model) : model;
|
3520
|
+
};
|
3508
3521
|
const can = (action, entity, field) => {
|
3509
|
-
|
3522
|
+
const subject = toSubject(entity);
|
3523
|
+
const aliases = actionProvider.unstable_aliases(action, model);
|
3524
|
+
return (
|
3525
|
+
// Test the original action to see if it passes
|
3526
|
+
userAbility.can(action, subject, field) || // Else try every known alias if at least one of them succeed, then the user "can"
|
3527
|
+
aliases.some((alias) => userAbility.can(alias, subject, field))
|
3528
|
+
);
|
3510
3529
|
};
|
3511
3530
|
const cannot = (action, entity, field) => {
|
3512
|
-
|
3531
|
+
const subject = toSubject(entity);
|
3532
|
+
const aliases = actionProvider.unstable_aliases(action, model);
|
3533
|
+
return (
|
3534
|
+
// Test both the original action
|
3535
|
+
userAbility.cannot(action, subject, field) && // and every known alias, if all of them fail (cannot), then the user truly "cannot"
|
3536
|
+
aliases.every((alias) => userAbility.cannot(alias, subject, field))
|
3537
|
+
);
|
3513
3538
|
};
|
3514
3539
|
const sanitizeOutput = (data, { action = ACTIONS.read } = {}) => {
|
3515
3540
|
return permissionsManager.sanitizeOutput(data, { subject: toSubject(data), action });
|