@payloadcms/plugin-multi-tenant 4.0.0-internal.fa345ef → 4.0.0-internal.fec2230
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/components/AssignTenantFieldModal/index.client.d.ts +2 -2
- package/dist/components/AssignTenantFieldModal/index.client.d.ts.map +1 -1
- package/dist/components/AssignTenantFieldModal/index.client.js.map +1 -1
- package/dist/components/GlobalViewRedirect/index.d.ts.map +1 -1
- package/dist/components/TenantField/index.client.d.ts.map +1 -1
- package/dist/components/TenantField/index.client.js +84 -74
- package/dist/components/TenantField/index.client.js.map +1 -1
- package/dist/components/TenantSelector/index.client.d.ts +1 -1
- package/dist/components/TenantSelector/index.client.d.ts.map +1 -1
- package/dist/components/TenantSelector/index.d.ts.map +1 -1
- package/dist/defaults.d.ts.map +1 -1
- package/dist/endpoints/getTenantOptionsEndpoint.d.ts +1 -1
- package/dist/endpoints/getTenantOptionsEndpoint.d.ts.map +1 -1
- package/dist/fields/tenantField/index.d.ts.map +1 -1
- package/dist/fields/tenantsArrayField/index.d.ts.map +1 -1
- package/dist/filters/filterDocumentsByTenants.d.ts.map +1 -1
- package/dist/hooks/afterTenantDelete.d.ts +1 -1
- package/dist/hooks/afterTenantDelete.d.ts.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -3
- package/dist/index.js.map +1 -1
- package/dist/index.spec.js +70 -0
- package/dist/index.spec.js.map +1 -0
- package/dist/providers/TenantSelectionProvider/index.client.d.ts.map +1 -1
- package/dist/providers/TenantSelectionProvider/index.d.ts.map +1 -1
- package/dist/translations/languages/en.d.ts.map +1 -1
- package/dist/types.d.ts +1 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utilities/addCollectionAccess.d.ts +6 -8
- package/dist/utilities/addCollectionAccess.d.ts.map +1 -1
- package/dist/utilities/addCollectionAccess.js +91 -20
- package/dist/utilities/addCollectionAccess.js.map +1 -1
- package/dist/utilities/addCollectionAccess.spec.js +134 -0
- package/dist/utilities/addCollectionAccess.spec.js.map +1 -0
- package/dist/utilities/combineFilters.d.ts.map +1 -1
- package/dist/utilities/extractID.d.ts.map +1 -1
- package/dist/utilities/generateCookie.d.ts.map +1 -1
- package/dist/utilities/getCollectionIDType.d.ts +1 -1
- package/dist/utilities/getCollectionIDType.d.ts.map +1 -1
- package/dist/utilities/getTenantOptions.d.ts +1 -1
- package/dist/utilities/getTenantOptions.d.ts.map +1 -1
- package/dist/utilities/getUserTenantIDs.d.ts.map +1 -1
- package/dist/utilities/miniChalk.d.ts.map +1 -1
- package/package.json +6 -7
- package/dist/utilities/combineWhereConstraints.d.ts +0 -3
- package/dist/utilities/combineWhereConstraints.d.ts.map +0 -1
- package/dist/utilities/combineWhereConstraints.js +0 -19
- package/dist/utilities/combineWhereConstraints.js.map +0 -1
- package/dist/utilities/withTenantAccess.d.ts +0 -16
- package/dist/utilities/withTenantAccess.d.ts.map +0 -1
- package/dist/utilities/withTenantAccess.js +0 -76
- package/dist/utilities/withTenantAccess.js.map +0 -1
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { multiTenantPlugin } from './index.js';
|
|
3
|
+
describe('multiTenantPlugin', ()=>{
|
|
4
|
+
it('applies tenant assignment access defaults', async ()=>{
|
|
5
|
+
let hasAllTenantAccess = false;
|
|
6
|
+
const plugin = multiTenantPlugin({
|
|
7
|
+
collections: {},
|
|
8
|
+
userHasAccessToAllTenants: ()=>hasAllTenantAccess
|
|
9
|
+
});
|
|
10
|
+
const config = await plugin({
|
|
11
|
+
collections: [
|
|
12
|
+
{
|
|
13
|
+
slug: 'users',
|
|
14
|
+
auth: true,
|
|
15
|
+
fields: []
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
slug: 'tenants',
|
|
19
|
+
fields: []
|
|
20
|
+
}
|
|
21
|
+
]
|
|
22
|
+
});
|
|
23
|
+
const usersCollection = config.collections?.find(({ slug })=>slug === 'users');
|
|
24
|
+
const tenantsField = usersCollection?.fields.find((field)=>'name' in field && field.name === 'tenants');
|
|
25
|
+
const accessArgs = {
|
|
26
|
+
req: {
|
|
27
|
+
user: {
|
|
28
|
+
id: 'test-user'
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
expect(await tenantsField?.access?.create?.(accessArgs)).toBe(false);
|
|
33
|
+
expect(await tenantsField?.access?.update?.(accessArgs)).toBe(false);
|
|
34
|
+
hasAllTenantAccess = true;
|
|
35
|
+
expect(await tenantsField?.access?.create?.(accessArgs)).toBe(true);
|
|
36
|
+
expect(await tenantsField?.access?.update?.(accessArgs)).toBe(true);
|
|
37
|
+
});
|
|
38
|
+
it('retains configured tenant assignment access callbacks', async ()=>{
|
|
39
|
+
const createAccess = ()=>false;
|
|
40
|
+
const updateAccess = ()=>true;
|
|
41
|
+
const plugin = multiTenantPlugin({
|
|
42
|
+
collections: {},
|
|
43
|
+
tenantsArrayField: {
|
|
44
|
+
arrayFieldAccess: {
|
|
45
|
+
create: createAccess,
|
|
46
|
+
update: updateAccess
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
const config = await plugin({
|
|
51
|
+
collections: [
|
|
52
|
+
{
|
|
53
|
+
slug: 'users',
|
|
54
|
+
auth: true,
|
|
55
|
+
fields: []
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
slug: 'tenants',
|
|
59
|
+
fields: []
|
|
60
|
+
}
|
|
61
|
+
]
|
|
62
|
+
});
|
|
63
|
+
const usersCollection = config.collections?.find(({ slug })=>slug === 'users');
|
|
64
|
+
const tenantsField = usersCollection?.fields.find((field)=>'name' in field && field.name === 'tenants');
|
|
65
|
+
expect(tenantsField?.access?.create).toBe(createAccess);
|
|
66
|
+
expect(tenantsField?.access?.update).toBe(updateAccess);
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
//# sourceMappingURL=index.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.spec.ts"],"sourcesContent":["import type { ArrayField, Config } from 'payload'\n\nimport { describe, expect, it } from 'vitest'\n\nimport { multiTenantPlugin } from './index.js'\n\ndescribe('multiTenantPlugin', () => {\n it('applies tenant assignment access defaults', async () => {\n let hasAllTenantAccess = false\n const plugin = multiTenantPlugin({\n collections: {},\n userHasAccessToAllTenants: () => hasAllTenantAccess,\n })\n const config = await plugin({\n collections: [\n { slug: 'users', auth: true, fields: [] },\n { slug: 'tenants', fields: [] },\n ],\n } as Config)\n const usersCollection = config.collections?.find(({ slug }) => slug === 'users')\n const tenantsField = usersCollection?.fields.find(\n (field): field is ArrayField => 'name' in field && field.name === 'tenants',\n )\n const accessArgs = { req: { user: { id: 'test-user' } } } as never\n\n expect(await tenantsField?.access?.create?.(accessArgs)).toBe(false)\n expect(await tenantsField?.access?.update?.(accessArgs)).toBe(false)\n\n hasAllTenantAccess = true\n\n expect(await tenantsField?.access?.create?.(accessArgs)).toBe(true)\n expect(await tenantsField?.access?.update?.(accessArgs)).toBe(true)\n })\n\n it('retains configured tenant assignment access callbacks', async () => {\n const createAccess = () => false\n const updateAccess = () => true\n const plugin = multiTenantPlugin({\n collections: {},\n tenantsArrayField: {\n arrayFieldAccess: {\n create: createAccess,\n update: updateAccess,\n },\n },\n })\n const config = await plugin({\n collections: [\n { slug: 'users', auth: true, fields: [] },\n { slug: 'tenants', fields: [] },\n ],\n } as Config)\n const usersCollection = config.collections?.find(({ slug }) => slug === 'users')\n const tenantsField = usersCollection?.fields.find(\n (field): field is ArrayField => 'name' in field && field.name === 'tenants',\n )\n\n expect(tenantsField?.access?.create).toBe(createAccess)\n expect(tenantsField?.access?.update).toBe(updateAccess)\n })\n})\n"],"names":["describe","expect","it","multiTenantPlugin","hasAllTenantAccess","plugin","collections","userHasAccessToAllTenants","config","slug","auth","fields","usersCollection","find","tenantsField","field","name","accessArgs","req","user","id","access","create","toBe","update","createAccess","updateAccess","tenantsArrayField","arrayFieldAccess"],"mappings":"AAEA,SAASA,QAAQ,EAAEC,MAAM,EAAEC,EAAE,QAAQ,SAAQ;AAE7C,SAASC,iBAAiB,QAAQ,aAAY;AAE9CH,SAAS,qBAAqB;IAC5BE,GAAG,6CAA6C;QAC9C,IAAIE,qBAAqB;QACzB,MAAMC,SAASF,kBAAkB;YAC/BG,aAAa,CAAC;YACdC,2BAA2B,IAAMH;QACnC;QACA,MAAMI,SAAS,MAAMH,OAAO;YAC1BC,aAAa;gBACX;oBAAEG,MAAM;oBAASC,MAAM;oBAAMC,QAAQ,EAAE;gBAAC;gBACxC;oBAAEF,MAAM;oBAAWE,QAAQ,EAAE;gBAAC;aAC/B;QACH;QACA,MAAMC,kBAAkBJ,OAAOF,WAAW,EAAEO,KAAK,CAAC,EAAEJ,IAAI,EAAE,GAAKA,SAAS;QACxE,MAAMK,eAAeF,iBAAiBD,OAAOE,KAC3C,CAACE,QAA+B,UAAUA,SAASA,MAAMC,IAAI,KAAK;QAEpE,MAAMC,aAAa;YAAEC,KAAK;gBAAEC,MAAM;oBAAEC,IAAI;gBAAY;YAAE;QAAE;QAExDnB,OAAO,MAAMa,cAAcO,QAAQC,SAASL,aAAaM,IAAI,CAAC;QAC9DtB,OAAO,MAAMa,cAAcO,QAAQG,SAASP,aAAaM,IAAI,CAAC;QAE9DnB,qBAAqB;QAErBH,OAAO,MAAMa,cAAcO,QAAQC,SAASL,aAAaM,IAAI,CAAC;QAC9DtB,OAAO,MAAMa,cAAcO,QAAQG,SAASP,aAAaM,IAAI,CAAC;IAChE;IAEArB,GAAG,yDAAyD;QAC1D,MAAMuB,eAAe,IAAM;QAC3B,MAAMC,eAAe,IAAM;QAC3B,MAAMrB,SAASF,kBAAkB;YAC/BG,aAAa,CAAC;YACdqB,mBAAmB;gBACjBC,kBAAkB;oBAChBN,QAAQG;oBACRD,QAAQE;gBACV;YACF;QACF;QACA,MAAMlB,SAAS,MAAMH,OAAO;YAC1BC,aAAa;gBACX;oBAAEG,MAAM;oBAASC,MAAM;oBAAMC,QAAQ,EAAE;gBAAC;gBACxC;oBAAEF,MAAM;oBAAWE,QAAQ,EAAE;gBAAC;aAC/B;QACH;QACA,MAAMC,kBAAkBJ,OAAOF,WAAW,EAAEO,KAAK,CAAC,EAAEJ,IAAI,EAAE,GAAKA,SAAS;QACxE,MAAMK,eAAeF,iBAAiBD,OAAOE,KAC3C,CAACE,QAA+B,UAAUA,SAASA,MAAMC,IAAI,KAAK;QAGpEf,OAAOa,cAAcO,QAAQC,QAAQC,IAAI,CAACE;QAC1CxB,OAAOa,cAAcO,QAAQG,QAAQD,IAAI,CAACG;IAC5C;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.client.d.ts","sourceRoot":"","sources":["../../../src/providers/TenantSelectionProvider/index.client.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAI3C,OAAO,KAAwB,MAAM,OAAO,CAAA;AAI5C,KAAK,WAAW,GAAG;IACjB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,UAAU,GAAG,QAAQ,CAAA;IAClC;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB;;OAEG;IACH,OAAO,EAAE,YAAY,EAAE,CAAA;IACvB;;OAEG;IACH,gBAAgB,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;IAC7C;;OAEG;IACH,aAAa,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,UAAU,GAAG,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAA;IACtF;;OAEG;IACH,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAA;IAC1D;;;;;OAKG;IACH,SAAS,EAAE,CAAC,IAAI,EAAE;QAAE,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAA;IACjF;;OAEG;IACH,WAAW,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAChC;;OAEG;IACH,aAAa,EAAE,CAAC,IAAI,EAAE;QAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAA;CACtE,CAAA;AA+CD,eAAO,MAAM,6BAA6B,
|
|
1
|
+
{"version":3,"file":"index.client.d.ts","sourceRoot":"","sources":["../../../src/providers/TenantSelectionProvider/index.client.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAI3C,OAAO,KAAwB,MAAM,OAAO,CAAA;AAI5C,KAAK,WAAW,GAAG;IACjB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,UAAU,GAAG,QAAQ,CAAA;IAClC;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB;;OAEG;IACH,OAAO,EAAE,YAAY,EAAE,CAAA;IACvB;;OAEG;IACH,gBAAgB,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;IAC7C;;OAEG;IACH,aAAa,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,UAAU,GAAG,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAA;IACtF;;OAEG;IACH,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAA;IAC1D;;;;;OAKG;IACH,SAAS,EAAE,CAAC,IAAI,EAAE;QAAE,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAA;IACjF;;OAEG;IACH,WAAW,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAChC;;OAEG;IACH,aAAa,EAAE,CAAC,IAAI,EAAE;QAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAA;CACtE,CAAA;AA+CD,eAAO,MAAM,6BAA6B,6EAKvC;IACD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,oBAAoB,EAAE,YAAY,EAAE,CAAA;IACpC,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAC9B,qBAAqB,EAAE,MAAM,CAAA;CAC9B,sBAiOA,CAAA;AAED,eAAO,MAAM,kBAAkB,mBAA2B,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/TenantSelectionProvider/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAE3D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAA;AAK7D,KAAK,IAAI,GAAG;IACV,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,CAAC,EAAE,aAAa,CAAA;IACtB,qBAAqB,EAAE,MAAM,CAAA;IAC7B,2BAA2B,EAAE,MAAM,CAAA;IACnC,qBAAqB,EAAE,MAAM,CAAA;IAC7B,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,IAAI,CAAA;IACV,yBAAyB,EAAE,QAAQ,CAAC,uBAAuB,CAAC,CAAC,2BAA2B,CAAC,CAAA;CAC1F,CAAA;AAED,eAAO,MAAM,uBAAuB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/TenantSelectionProvider/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAE3D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAA;AAK7D,KAAK,IAAI,GAAG;IACV,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,CAAC,EAAE,aAAa,CAAA;IACtB,qBAAqB,EAAE,MAAM,CAAA;IAC7B,2BAA2B,EAAE,MAAM,CAAA;IACnC,qBAAqB,EAAE,MAAM,CAAA;IAC7B,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,IAAI,CAAA;IACV,yBAAyB,EAAE,QAAQ,CAAC,uBAAuB,CAAC,CAAC,2BAA2B,CAAC,CAAA;CAC1F,CAAA;AAED,eAAO,MAAM,uBAAuB,2JAUjC,IAAI,yCA8CN,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"en.d.ts","sourceRoot":"","sources":["../../../src/translations/languages/en.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEjD,eAAO,MAAM,cAAc
|
|
1
|
+
{"version":3,"file":"en.d.ts","sourceRoot":"","sources":["../../../src/translations/languages/en.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEjD,eAAO,MAAM,cAAc;IACzB,qBAAqB;QACnB,4BAA4B;QAC5B,2BAA2B;QAC3B,4BAA4B;QAC5B,0BAA0B;;CAE7B,CAAA;AAED,eAAO,MAAM,EAAE,EAAE,cAGhB,CAAA"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { AcceptedLanguages } from '@payloadcms/translations';
|
|
2
2
|
import type { AccessArgs, AccessResult, ArrayField, CollectionConfig, CollectionSlug, Field, RelationshipField, SingleRelationshipField, User } from 'payload';
|
|
3
|
+
export type TenantValue = (number | string)[] | (number | string);
|
|
3
4
|
export type MultiTenantPluginConfig = {
|
|
4
5
|
/**
|
|
5
6
|
* After a tenant is deleted, the plugin will attempt to clean up related documents
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/types.ts"],"sourcesContent":["import type { AcceptedLanguages } from '@payloadcms/translations'\nimport type {\n AccessArgs,\n AccessResult,\n ArrayField,\n CollectionConfig,\n CollectionSlug,\n Field,\n RelationshipField,\n SingleRelationshipField,\n User,\n} from 'payload'\n\nexport type MultiTenantPluginConfig = {\n /**\n * After a tenant is deleted, the plugin will attempt to clean up related documents\n * - removing documents with the tenant ID\n * - removing the tenant from users\n *\n * @default true\n */\n cleanupAfterTenantDelete?: boolean\n /**\n * Automatically\n */\n collections: {\n [key in CollectionSlug]?: {\n /**\n * Override the access result from the collection access control functions\n *\n * The function receives:\n * - accessResult: the original result from the access control function\n * - accessKey: 'read', 'create', 'update', 'delete', 'readVersions', or 'unlock'\n * - ...restOfAccessArgs: the original arguments passed to the access control function\n */\n accessResultOverride?: CollectionAccessResultOverride\n /**\n * Opt out of adding the tenant field and place\n * it manually using the `tenantField` export from the plugin\n */\n customTenantField?: boolean\n /**\n * Set to `true` if you want the collection to behave as a global\n *\n * @default false\n */\n isGlobal?: boolean\n /**\n * Overrides for the tenant field, will override the entire tenantField configuration\n */\n tenantFieldOverrides?: CollectionTenantFieldConfigOverrides\n /**\n * Set to `false` if you want to manually apply the baseListFilter\n * Set to `false` if you want to manually apply the baseFilter\n *\n * @default true\n */\n useBaseFilter?: boolean\n /**\n * @deprecated Use `useBaseFilter` instead. If both are defined,\n * `useBaseFilter` will take precedence. This property remains only\n * for backward compatibility and may be removed in a future version.\n *\n * Originally, `baseListFilter` was intended to filter only the List View\n * in the admin panel. However, base filtering is often required in other areas\n * such as internal link relationships in the Lexical editor.\n *\n * @default true\n */\n useBaseListFilter?: boolean\n /**\n * Set to `false` if you want to handle collection access manually without the multi-tenant constraints applied\n *\n * @default true\n */\n useTenantAccess?: boolean\n }\n }\n /**\n * Enables debug mode\n * - Makes the tenant field visible in the admin UI within applicable collections\n *\n * @default false\n */\n debug?: boolean\n /**\n * Enables the multi-tenant plugin\n *\n * @default true\n */\n enabled?: boolean\n /**\n * Localization for the plugin\n */\n i18n?: {\n translations: {\n [key in AcceptedLanguages]?: {\n /**\n * Shown inside 3 dot menu on edit document view\n *\n * @default 'Assign Tenant'\n */\n 'assign-tenant-button-label'?: string\n /**\n * Shown as the title of the assign tenant modal\n *\n * @default 'Assign \"{{title}}\"'\n */\n 'assign-tenant-modal-title'?: string\n /**\n * Shown as the label for the assigned tenant field in the assign tenant modal\n *\n * @default 'Assigned Tenant'\n */\n 'field-assignedTenant-label'?: string\n /**\n * Shown as the label for the global tenant selector in the admin UI\n *\n * @default 'Filter by Tenant'\n */\n 'nav-tenantSelector-label'?: string\n }\n }\n }\n /**\n * Field configuration for the field added to all tenant enabled collections\n */\n tenantField?: RootTenantFieldConfigOverrides\n /**\n * Field configuration for the field added to the users collection\n *\n * If `includeDefaultField` is `false`, you must include the field on your users collection manually\n * This is useful if you want to customize the field or place the field in a specific location\n */\n tenantsArrayField?:\n | {\n /**\n * Access configuration for the array field\n */\n arrayFieldAccess?: ArrayField['access']\n /**\n * Name of the array field\n *\n * @default 'tenants'\n */\n arrayFieldName?: string\n /**\n * Name of the tenant field\n *\n * @default 'tenant'\n */\n arrayTenantFieldName?: string\n /**\n * When `includeDefaultField` is `true`, the field will be added to the users collection automatically\n */\n includeDefaultField?: true\n /**\n * Additional fields to include on the tenants array field\n */\n rowFields?: Field[]\n /**\n * Access configuration for the tenant field\n */\n tenantFieldAccess?: RelationshipField['access']\n }\n | {\n arrayFieldAccess?: never\n arrayFieldName?: string\n arrayTenantFieldName?: string\n /**\n * When `includeDefaultField` is `false`, you must include the field on your users collection manually\n */\n includeDefaultField?: false\n rowFields?: never\n tenantFieldAccess?: never\n }\n /**\n * Customize tenant selector label\n *\n * Either a string or an object where the keys are i18n codes and the values are the string labels\n *\n * @deprecated Use `i18n.translations` instead.\n */\n tenantSelectorLabel?:\n | Partial<{\n [key in AcceptedLanguages]?: string\n }>\n | string\n /**\n * The slug for the tenant collection\n *\n * @default 'tenants'\n */\n tenantsSlug?: string\n /**\n * Function that determines if a user has access to _all_ tenants\n *\n * Useful for super-admin type users\n */\n userHasAccessToAllTenants?: (user: User) => boolean\n /**\n * Override the access result on the users collection access control functions\n *\n * The function receives:\n * - accessResult: the original result from the access control function\n * - accessKey: 'read', 'create', 'update', 'delete', 'readVersions', or 'unlock'\n * - ...restOfAccessArgs: the original arguments passed to the access control function\n */\n usersAccessResultOverride?: CollectionAccessResultOverride\n /**\n * Opt out of adding access constraints to the tenants collection\n */\n useTenantsCollectionAccess?: boolean\n /**\n * Opt out including the baseListFilter to filter tenants by selected tenant\n */\n useTenantsListFilter?: boolean\n\n /**\n * Opt out including the baseListFilter to filter users by selected tenant\n */\n useUsersTenantFilter?: boolean\n}\n\nexport type RootTenantFieldConfigOverrides = Partial<\n Omit<\n SingleRelationshipField,\n | '_sanitized'\n | 'hidden'\n | 'index'\n | 'localized'\n | 'max'\n | 'maxRows'\n | 'min'\n | 'minRows'\n | 'relationTo'\n | 'required'\n | 'type'\n | 'unique'\n | 'virtual'\n >\n>\n\nexport type CollectionTenantFieldConfigOverrides = Partial<\n Omit<RootTenantFieldConfigOverrides, 'name'>\n>\n\nexport type Tenant<IDType = number | string> = {\n id: IDType\n name: string\n}\n\nexport type UserWithTenantsField = {\n tenants?:\n | {\n tenant: number | string | Tenant\n }[]\n | null\n} & User\n\ntype AllAccessKeysT<T extends readonly string[]> = T[number] extends keyof Omit<\n Required<CollectionConfig>['access'],\n 'admin'\n>\n ? keyof Omit<Required<CollectionConfig>['access'], 'admin'> extends T[number]\n ? T\n : never\n : never\n\nexport type AllAccessKeys = AllAccessKeysT<\n ['create', 'read', 'update', 'delete', 'readVersions', 'unlock']\n>\n\nexport type CollectionAccessResultOverride = ({\n accessKey,\n accessResult,\n}: {\n accessKey: AllAccessKeys[number]\n accessResult: AccessResult\n} & AccessArgs) => AccessResult | Promise<AccessResult>\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../src/types.ts"],"sourcesContent":["import type { AcceptedLanguages } from '@payloadcms/translations'\nimport type {\n AccessArgs,\n AccessResult,\n ArrayField,\n CollectionConfig,\n CollectionSlug,\n Field,\n RelationshipField,\n SingleRelationshipField,\n User,\n} from 'payload'\n\nexport type TenantValue = (number | string)[] | (number | string)\n\nexport type MultiTenantPluginConfig = {\n /**\n * After a tenant is deleted, the plugin will attempt to clean up related documents\n * - removing documents with the tenant ID\n * - removing the tenant from users\n *\n * @default true\n */\n cleanupAfterTenantDelete?: boolean\n /**\n * Automatically\n */\n collections: {\n [key in CollectionSlug]?: {\n /**\n * Override the access result from the collection access control functions\n *\n * The function receives:\n * - accessResult: the original result from the access control function\n * - accessKey: 'read', 'create', 'update', 'delete', 'readVersions', or 'unlock'\n * - ...restOfAccessArgs: the original arguments passed to the access control function\n */\n accessResultOverride?: CollectionAccessResultOverride\n /**\n * Opt out of adding the tenant field and place\n * it manually using the `tenantField` export from the plugin\n */\n customTenantField?: boolean\n /**\n * Set to `true` if you want the collection to behave as a global\n *\n * @default false\n */\n isGlobal?: boolean\n /**\n * Overrides for the tenant field, will override the entire tenantField configuration\n */\n tenantFieldOverrides?: CollectionTenantFieldConfigOverrides\n /**\n * Set to `false` if you want to manually apply the baseListFilter\n * Set to `false` if you want to manually apply the baseFilter\n *\n * @default true\n */\n useBaseFilter?: boolean\n /**\n * @deprecated Use `useBaseFilter` instead. If both are defined,\n * `useBaseFilter` will take precedence. This property remains only\n * for backward compatibility and may be removed in a future version.\n *\n * Originally, `baseListFilter` was intended to filter only the List View\n * in the admin panel. However, base filtering is often required in other areas\n * such as internal link relationships in the Lexical editor.\n *\n * @default true\n */\n useBaseListFilter?: boolean\n /**\n * Set to `false` if you want to handle collection access manually without the multi-tenant constraints applied\n *\n * @default true\n */\n useTenantAccess?: boolean\n }\n }\n /**\n * Enables debug mode\n * - Makes the tenant field visible in the admin UI within applicable collections\n *\n * @default false\n */\n debug?: boolean\n /**\n * Enables the multi-tenant plugin\n *\n * @default true\n */\n enabled?: boolean\n /**\n * Localization for the plugin\n */\n i18n?: {\n translations: {\n [key in AcceptedLanguages]?: {\n /**\n * Shown inside 3 dot menu on edit document view\n *\n * @default 'Assign Tenant'\n */\n 'assign-tenant-button-label'?: string\n /**\n * Shown as the title of the assign tenant modal\n *\n * @default 'Assign \"{{title}}\"'\n */\n 'assign-tenant-modal-title'?: string\n /**\n * Shown as the label for the assigned tenant field in the assign tenant modal\n *\n * @default 'Assigned Tenant'\n */\n 'field-assignedTenant-label'?: string\n /**\n * Shown as the label for the global tenant selector in the admin UI\n *\n * @default 'Filter by Tenant'\n */\n 'nav-tenantSelector-label'?: string\n }\n }\n }\n /**\n * Field configuration for the field added to all tenant enabled collections\n */\n tenantField?: RootTenantFieldConfigOverrides\n /**\n * Field configuration for the field added to the users collection\n *\n * If `includeDefaultField` is `false`, you must include the field on your users collection manually\n * This is useful if you want to customize the field or place the field in a specific location\n */\n tenantsArrayField?:\n | {\n /**\n * Access configuration for the array field\n */\n arrayFieldAccess?: ArrayField['access']\n /**\n * Name of the array field\n *\n * @default 'tenants'\n */\n arrayFieldName?: string\n /**\n * Name of the tenant field\n *\n * @default 'tenant'\n */\n arrayTenantFieldName?: string\n /**\n * When `includeDefaultField` is `true`, the field will be added to the users collection automatically\n */\n includeDefaultField?: true\n /**\n * Additional fields to include on the tenants array field\n */\n rowFields?: Field[]\n /**\n * Access configuration for the tenant field\n */\n tenantFieldAccess?: RelationshipField['access']\n }\n | {\n arrayFieldAccess?: never\n arrayFieldName?: string\n arrayTenantFieldName?: string\n /**\n * When `includeDefaultField` is `false`, you must include the field on your users collection manually\n */\n includeDefaultField?: false\n rowFields?: never\n tenantFieldAccess?: never\n }\n /**\n * Customize tenant selector label\n *\n * Either a string or an object where the keys are i18n codes and the values are the string labels\n *\n * @deprecated Use `i18n.translations` instead.\n */\n tenantSelectorLabel?:\n | Partial<{\n [key in AcceptedLanguages]?: string\n }>\n | string\n /**\n * The slug for the tenant collection\n *\n * @default 'tenants'\n */\n tenantsSlug?: string\n /**\n * Function that determines if a user has access to _all_ tenants\n *\n * Useful for super-admin type users\n */\n userHasAccessToAllTenants?: (user: User) => boolean\n /**\n * Override the access result on the users collection access control functions\n *\n * The function receives:\n * - accessResult: the original result from the access control function\n * - accessKey: 'read', 'create', 'update', 'delete', 'readVersions', or 'unlock'\n * - ...restOfAccessArgs: the original arguments passed to the access control function\n */\n usersAccessResultOverride?: CollectionAccessResultOverride\n /**\n * Opt out of adding access constraints to the tenants collection\n */\n useTenantsCollectionAccess?: boolean\n /**\n * Opt out including the baseListFilter to filter tenants by selected tenant\n */\n useTenantsListFilter?: boolean\n\n /**\n * Opt out including the baseListFilter to filter users by selected tenant\n */\n useUsersTenantFilter?: boolean\n}\n\nexport type RootTenantFieldConfigOverrides = Partial<\n Omit<\n SingleRelationshipField,\n | '_sanitized'\n | 'hidden'\n | 'index'\n | 'localized'\n | 'max'\n | 'maxRows'\n | 'min'\n | 'minRows'\n | 'relationTo'\n | 'required'\n | 'type'\n | 'unique'\n | 'virtual'\n >\n>\n\nexport type CollectionTenantFieldConfigOverrides = Partial<\n Omit<RootTenantFieldConfigOverrides, 'name'>\n>\n\nexport type Tenant<IDType = number | string> = {\n id: IDType\n name: string\n}\n\nexport type UserWithTenantsField = {\n tenants?:\n | {\n tenant: number | string | Tenant\n }[]\n | null\n} & User\n\ntype AllAccessKeysT<T extends readonly string[]> = T[number] extends keyof Omit<\n Required<CollectionConfig>['access'],\n 'admin'\n>\n ? keyof Omit<Required<CollectionConfig>['access'], 'admin'> extends T[number]\n ? T\n : never\n : never\n\nexport type AllAccessKeys = AllAccessKeysT<\n ['create', 'read', 'update', 'delete', 'readVersions', 'unlock']\n>\n\nexport type CollectionAccessResultOverride = ({\n accessKey,\n accessResult,\n}: {\n accessKey: AllAccessKeys[number]\n accessResult: AccessResult\n} & AccessArgs) => AccessResult | Promise<AccessResult>\n"],"names":[],"mappings":"AAmRA,WAMuD"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type { CollectionConfig } from 'payload';
|
|
1
|
+
import type { CollectionConfig, Config } from 'payload';
|
|
2
2
|
import type { AllAccessKeys, MultiTenantPluginConfig } from '../types.js';
|
|
3
3
|
export declare const collectionAccessKeys: AllAccessKeys;
|
|
4
|
-
type
|
|
4
|
+
export type TenantAccessConfig = {
|
|
5
5
|
accessResultCallback?: MultiTenantPluginConfig['usersAccessResultOverride'];
|
|
6
6
|
adminUsersSlug: string;
|
|
7
7
|
collection: CollectionConfig;
|
|
@@ -10,10 +10,8 @@ type Args = {
|
|
|
10
10
|
tenantsArrayTenantFieldName?: string;
|
|
11
11
|
userHasAccessToAllTenants: Required<MultiTenantPluginConfig>['userHasAccessToAllTenants'];
|
|
12
12
|
};
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
export declare const addCollectionAccess: ({ accessResultCallback, adminUsersSlug, collection, fieldName, tenantsArrayFieldName, tenantsArrayTenantFieldName, userHasAccessToAllTenants, }: Args) => void;
|
|
18
|
-
export {};
|
|
13
|
+
export declare const addCollectionAccess: ({ config, scopes, }: {
|
|
14
|
+
config: Config;
|
|
15
|
+
scopes: TenantAccessConfig[];
|
|
16
|
+
}) => void;
|
|
19
17
|
//# sourceMappingURL=addCollectionAccess.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"addCollectionAccess.d.ts","sourceRoot":"","sources":["../../src/utilities/addCollectionAccess.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"addCollectionAccess.d.ts","sourceRoot":"","sources":["../../src/utilities/addCollectionAccess.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA4B,gBAAgB,EAAE,MAAM,EAAe,MAAM,SAAS,CAAA;AAE9F,OAAO,KAAK,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAA;AAIzE,eAAO,MAAM,oBAAoB,EAAE,aAOzB,CAAA;AAEV,MAAM,MAAM,kBAAkB,GAAG;IAC/B,oBAAoB,CAAC,EAAE,uBAAuB,CAAC,2BAA2B,CAAC,CAAA;IAC3E,cAAc,EAAE,MAAM,CAAA;IACtB,UAAU,EAAE,gBAAgB,CAAA;IAC5B,SAAS,EAAE,MAAM,CAAA;IACjB,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,2BAA2B,CAAC,EAAE,MAAM,CAAA;IACpC,yBAAyB,EAAE,QAAQ,CAAC,uBAAuB,CAAC,CAAC,2BAA2B,CAAC,CAAA;CAC1F,CAAA;AAsED,eAAO,MAAM,mBAAmB,wBAG7B;IACD,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,kBAAkB,EAAE,CAAA;CAC7B,KAAG,IA4CH,CAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { getTenantAccess } from './getTenantAccess.js';
|
|
2
2
|
export const collectionAccessKeys = [
|
|
3
3
|
'create',
|
|
4
4
|
'read',
|
|
@@ -7,26 +7,97 @@ export const collectionAccessKeys = [
|
|
|
7
7
|
'readVersions',
|
|
8
8
|
'unlock'
|
|
9
9
|
];
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
10
|
+
const getTenantAccessResult = ({ accessKey, accessResult, accessResultCallback, adminUsersSlug, args, collection, fieldName, tenantsArrayFieldName, tenantsArrayTenantFieldName, userHasAccessToAllTenants })=>{
|
|
11
|
+
const finish = (result)=>accessResultCallback ? accessResultCallback({
|
|
12
|
+
accessKey,
|
|
13
|
+
accessResult: result,
|
|
14
|
+
...args
|
|
15
|
+
}) : result;
|
|
16
|
+
if (!accessResult) {
|
|
17
|
+
return finish(false);
|
|
18
|
+
}
|
|
19
|
+
const user = args.req.user;
|
|
20
|
+
if (!user || user.collection !== adminUsersSlug || userHasAccessToAllTenants(user)) {
|
|
21
|
+
return finish(accessResult);
|
|
22
|
+
}
|
|
23
|
+
const tenantConstraint = getTenantAccess({
|
|
24
|
+
fieldName,
|
|
25
|
+
tenantsArrayFieldName,
|
|
26
|
+
tenantsArrayTenantFieldName,
|
|
27
|
+
user
|
|
28
|
+
});
|
|
29
|
+
if (tenantConstraint[fieldName]?.in.length === 0) {
|
|
30
|
+
return finish(collection.slug === user.collection ? {
|
|
31
|
+
id: {
|
|
32
|
+
equals: user.id
|
|
33
|
+
}
|
|
34
|
+
} : false);
|
|
35
|
+
}
|
|
36
|
+
const tenantResult = collection.slug === user.collection ? {
|
|
37
|
+
or: [
|
|
38
|
+
{
|
|
39
|
+
id: {
|
|
40
|
+
equals: user.id
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
tenantConstraint
|
|
44
|
+
]
|
|
45
|
+
} : tenantConstraint;
|
|
46
|
+
return finish(accessResult === true ? tenantResult : {
|
|
47
|
+
and: [
|
|
48
|
+
accessResult,
|
|
49
|
+
tenantResult
|
|
50
|
+
]
|
|
29
51
|
});
|
|
30
52
|
};
|
|
53
|
+
const wrapCollectionAccess = (scope)=>{
|
|
54
|
+
scope.collection.access ??= {};
|
|
55
|
+
for (const accessKey of collectionAccessKeys){
|
|
56
|
+
const accessFunction = scope.collection.access[accessKey] ?? (({ req })=>Boolean(req.user));
|
|
57
|
+
scope.collection.access[accessKey] = async (args)=>getTenantAccessResult({
|
|
58
|
+
...scope,
|
|
59
|
+
accessKey,
|
|
60
|
+
accessResult: await accessFunction(args),
|
|
61
|
+
args,
|
|
62
|
+
fieldName: accessKey === 'readVersions' ? `version.${scope.fieldName}` : scope.fieldName
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
export const addCollectionAccess = ({ config, scopes })=>{
|
|
67
|
+
const baseAccessScopes = new Map();
|
|
68
|
+
for (const scope of scopes){
|
|
69
|
+
if (scope.accessResultCallback) {
|
|
70
|
+
wrapCollectionAccess(scope);
|
|
71
|
+
} else {
|
|
72
|
+
baseAccessScopes.set(scope.collection.slug, scope);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
if (!baseAccessScopes.size) {
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
config.baseAccess ??= {};
|
|
79
|
+
config.baseAccess.collections ??= {};
|
|
80
|
+
for (const accessKey of collectionAccessKeys){
|
|
81
|
+
const baseAccessFunction = config.baseAccess.collections[accessKey];
|
|
82
|
+
config.baseAccess.collections[accessKey] = async (args)=>{
|
|
83
|
+
const baseResult = baseAccessFunction ? await baseAccessFunction(args) : true;
|
|
84
|
+
const scope = baseAccessScopes.get(args.slug);
|
|
85
|
+
if (!baseResult || !scope) {
|
|
86
|
+
return baseResult;
|
|
87
|
+
}
|
|
88
|
+
if (accessKey === 'create' && typeof baseResult === 'object') {
|
|
89
|
+
return baseResult;
|
|
90
|
+
}
|
|
91
|
+
const tenantResult = await getTenantAccessResult({
|
|
92
|
+
...scope,
|
|
93
|
+
accessKey,
|
|
94
|
+
accessResult: baseResult,
|
|
95
|
+
args,
|
|
96
|
+
fieldName: accessKey === 'readVersions' ? `version.${scope.fieldName}` : scope.fieldName
|
|
97
|
+
});
|
|
98
|
+
return accessKey === 'create' ? Boolean(tenantResult) : tenantResult;
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
};
|
|
31
102
|
|
|
32
103
|
//# sourceMappingURL=addCollectionAccess.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utilities/addCollectionAccess.ts"],"sourcesContent":["import type { CollectionConfig } from 'payload'\n\nimport type { AllAccessKeys, MultiTenantPluginConfig } from '../types.js'\n\nimport {
|
|
1
|
+
{"version":3,"sources":["../../src/utilities/addCollectionAccess.ts"],"sourcesContent":["import type { AccessArgs, AccessResult, CollectionConfig, Config, User, Where } from 'payload'\n\nimport type { AllAccessKeys, MultiTenantPluginConfig } from '../types.js'\n\nimport { getTenantAccess } from './getTenantAccess.js'\n\nexport const collectionAccessKeys: AllAccessKeys = [\n 'create',\n 'read',\n 'update',\n 'delete',\n 'readVersions',\n 'unlock',\n] as const\n\nexport type TenantAccessConfig = {\n accessResultCallback?: MultiTenantPluginConfig['usersAccessResultOverride']\n adminUsersSlug: string\n collection: CollectionConfig\n fieldName: string\n tenantsArrayFieldName?: string\n tenantsArrayTenantFieldName?: string\n userHasAccessToAllTenants: Required<MultiTenantPluginConfig>['userHasAccessToAllTenants']\n}\n\nconst getTenantAccessResult = ({\n accessKey,\n accessResult,\n accessResultCallback,\n adminUsersSlug,\n args,\n collection,\n fieldName,\n tenantsArrayFieldName,\n tenantsArrayTenantFieldName,\n userHasAccessToAllTenants,\n}: {\n accessKey: AllAccessKeys[number]\n accessResult: AccessResult\n args: AccessArgs\n} & TenantAccessConfig): AccessResult | Promise<AccessResult> => {\n const finish = (result: AccessResult): AccessResult | Promise<AccessResult> =>\n accessResultCallback\n ? accessResultCallback({ accessKey, accessResult: result, ...args })\n : result\n\n if (!accessResult) {\n return finish(false)\n }\n\n const user = args.req.user\n\n if (!user || user.collection !== adminUsersSlug || userHasAccessToAllTenants(user as User)) {\n return finish(accessResult)\n }\n\n const tenantConstraint = getTenantAccess({\n fieldName,\n tenantsArrayFieldName,\n tenantsArrayTenantFieldName,\n user,\n })\n\n if (tenantConstraint[fieldName]?.in.length === 0) {\n return finish(collection.slug === user.collection ? { id: { equals: user.id } } : false)\n }\n\n const tenantResult: Where =\n collection.slug === user.collection\n ? { or: [{ id: { equals: user.id } }, tenantConstraint] }\n : tenantConstraint\n\n return finish(accessResult === true ? tenantResult : { and: [accessResult, tenantResult] })\n}\n\nconst wrapCollectionAccess = (scope: TenantAccessConfig): void => {\n scope.collection.access ??= {}\n\n for (const accessKey of collectionAccessKeys) {\n const accessFunction =\n scope.collection.access[accessKey] ?? (({ req }: AccessArgs) => Boolean(req.user))\n\n scope.collection.access[accessKey] = async (args) =>\n getTenantAccessResult({\n ...scope,\n accessKey,\n accessResult: await accessFunction(args),\n args,\n fieldName: accessKey === 'readVersions' ? `version.${scope.fieldName}` : scope.fieldName,\n })\n }\n}\n\nexport const addCollectionAccess = ({\n config,\n scopes,\n}: {\n config: Config\n scopes: TenantAccessConfig[]\n}): void => {\n const baseAccessScopes = new Map<string, TenantAccessConfig>()\n\n for (const scope of scopes) {\n if (scope.accessResultCallback) {\n wrapCollectionAccess(scope)\n } else {\n baseAccessScopes.set(scope.collection.slug, scope)\n }\n }\n\n if (!baseAccessScopes.size) {\n return\n }\n\n config.baseAccess ??= {}\n config.baseAccess.collections ??= {}\n\n for (const accessKey of collectionAccessKeys) {\n const baseAccessFunction = config.baseAccess.collections[accessKey]\n\n config.baseAccess.collections[accessKey] = async (args) => {\n const baseResult = baseAccessFunction ? await baseAccessFunction(args) : true\n const scope = baseAccessScopes.get(args.slug)\n\n if (!baseResult || !scope) {\n return baseResult\n }\n\n if (accessKey === 'create' && typeof baseResult === 'object') {\n return baseResult\n }\n\n const tenantResult = await getTenantAccessResult({\n ...scope,\n accessKey,\n accessResult: baseResult,\n args,\n fieldName: accessKey === 'readVersions' ? `version.${scope.fieldName}` : scope.fieldName,\n })\n\n return accessKey === 'create' ? Boolean(tenantResult) : tenantResult\n }\n }\n}\n"],"names":["getTenantAccess","collectionAccessKeys","getTenantAccessResult","accessKey","accessResult","accessResultCallback","adminUsersSlug","args","collection","fieldName","tenantsArrayFieldName","tenantsArrayTenantFieldName","userHasAccessToAllTenants","finish","result","user","req","tenantConstraint","in","length","slug","id","equals","tenantResult","or","and","wrapCollectionAccess","scope","access","accessFunction","Boolean","addCollectionAccess","config","scopes","baseAccessScopes","Map","set","size","baseAccess","collections","baseAccessFunction","baseResult","get"],"mappings":"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"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { describe, expect, it, vi } from 'vitest';
|
|
2
|
+
import { addCollectionAccess } from './addCollectionAccess.js';
|
|
3
|
+
const createScope = (collection, accessResultCallback)=>({
|
|
4
|
+
accessResultCallback,
|
|
5
|
+
adminUsersSlug: 'users',
|
|
6
|
+
collection,
|
|
7
|
+
fieldName: 'tenant',
|
|
8
|
+
userHasAccessToAllTenants: ()=>false
|
|
9
|
+
});
|
|
10
|
+
const createArgs = (slug = 'posts')=>({
|
|
11
|
+
req: {
|
|
12
|
+
user: {
|
|
13
|
+
collection: 'users',
|
|
14
|
+
id: 'user-1',
|
|
15
|
+
tenants: [
|
|
16
|
+
{
|
|
17
|
+
tenant: 'tenant-1'
|
|
18
|
+
}
|
|
19
|
+
]
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
slug
|
|
23
|
+
});
|
|
24
|
+
describe('addCollectionAccess', ()=>{
|
|
25
|
+
it('adds tenant constraints through base access without replacing collection access', async ()=>{
|
|
26
|
+
const documentRead = vi.fn(()=>({
|
|
27
|
+
published: {
|
|
28
|
+
equals: true
|
|
29
|
+
}
|
|
30
|
+
}));
|
|
31
|
+
const collection = {
|
|
32
|
+
slug: 'posts',
|
|
33
|
+
access: {
|
|
34
|
+
read: documentRead
|
|
35
|
+
},
|
|
36
|
+
fields: []
|
|
37
|
+
};
|
|
38
|
+
const config = {
|
|
39
|
+
baseAccess: {
|
|
40
|
+
collections: {
|
|
41
|
+
read: ()=>({
|
|
42
|
+
archived: {
|
|
43
|
+
not_equals: true
|
|
44
|
+
}
|
|
45
|
+
})
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
addCollectionAccess({
|
|
50
|
+
config,
|
|
51
|
+
scopes: [
|
|
52
|
+
createScope(collection)
|
|
53
|
+
]
|
|
54
|
+
});
|
|
55
|
+
expect(collection.access?.read).toBe(documentRead);
|
|
56
|
+
await expect(config.baseAccess?.collections?.read?.(createArgs())).resolves.toEqual({
|
|
57
|
+
and: [
|
|
58
|
+
{
|
|
59
|
+
archived: {
|
|
60
|
+
not_equals: true
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
tenant: {
|
|
65
|
+
in: [
|
|
66
|
+
'tenant-1'
|
|
67
|
+
]
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
]
|
|
71
|
+
});
|
|
72
|
+
await expect(config.baseAccess?.collections?.read?.(createArgs('pages'))).resolves.toEqual({
|
|
73
|
+
archived: {
|
|
74
|
+
not_equals: true
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
expect(documentRead).not.toHaveBeenCalled();
|
|
78
|
+
});
|
|
79
|
+
it('returns a boolean tenant result for collection create access', async ()=>{
|
|
80
|
+
const collection = {
|
|
81
|
+
slug: 'posts',
|
|
82
|
+
fields: []
|
|
83
|
+
};
|
|
84
|
+
const config = {};
|
|
85
|
+
addCollectionAccess({
|
|
86
|
+
config,
|
|
87
|
+
scopes: [
|
|
88
|
+
createScope(collection)
|
|
89
|
+
]
|
|
90
|
+
});
|
|
91
|
+
await expect(config.baseAccess?.collections?.create?.(createArgs())).resolves.toBe(true);
|
|
92
|
+
});
|
|
93
|
+
it('keeps callback wrapping when an access result override is configured', async ()=>{
|
|
94
|
+
const documentResult = {
|
|
95
|
+
published: {
|
|
96
|
+
equals: true
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
const documentRead = vi.fn(()=>documentResult);
|
|
100
|
+
const accessResultCallback = vi.fn(({ accessResult })=>accessResult);
|
|
101
|
+
const collection = {
|
|
102
|
+
slug: 'posts',
|
|
103
|
+
access: {
|
|
104
|
+
read: documentRead
|
|
105
|
+
},
|
|
106
|
+
fields: []
|
|
107
|
+
};
|
|
108
|
+
const config = {};
|
|
109
|
+
addCollectionAccess({
|
|
110
|
+
config,
|
|
111
|
+
scopes: [
|
|
112
|
+
createScope(collection, accessResultCallback)
|
|
113
|
+
]
|
|
114
|
+
});
|
|
115
|
+
expect(config.baseAccess).toBeUndefined();
|
|
116
|
+
await expect(collection.access?.read?.(createArgs())).resolves.toEqual({
|
|
117
|
+
and: [
|
|
118
|
+
documentResult,
|
|
119
|
+
{
|
|
120
|
+
tenant: {
|
|
121
|
+
in: [
|
|
122
|
+
'tenant-1'
|
|
123
|
+
]
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
]
|
|
127
|
+
});
|
|
128
|
+
expect(accessResultCallback).toHaveBeenCalledWith(expect.objectContaining({
|
|
129
|
+
accessKey: 'read'
|
|
130
|
+
}));
|
|
131
|
+
});
|
|
132
|
+
});
|
|
133
|
+
|
|
134
|
+
//# sourceMappingURL=addCollectionAccess.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utilities/addCollectionAccess.spec.ts"],"sourcesContent":["import type { AccessArgs, CollectionConfig, Config } from 'payload'\n\nimport { describe, expect, it, vi } from 'vitest'\n\nimport type { TenantAccessConfig } from './addCollectionAccess.js'\n\nimport { addCollectionAccess } from './addCollectionAccess.js'\n\nconst createScope = (\n collection: CollectionConfig,\n accessResultCallback?: TenantAccessConfig['accessResultCallback'],\n): TenantAccessConfig => ({\n accessResultCallback,\n adminUsersSlug: 'users',\n collection,\n fieldName: 'tenant',\n userHasAccessToAllTenants: () => false,\n})\n\nconst createArgs = (slug = 'posts'): AccessArgs => ({\n req: {\n user: {\n collection: 'users',\n id: 'user-1',\n tenants: [{ tenant: 'tenant-1' }],\n },\n } as unknown as AccessArgs['req'],\n slug,\n})\n\ndescribe('addCollectionAccess', () => {\n it('adds tenant constraints through base access without replacing collection access', async () => {\n const documentRead = vi.fn(() => ({ published: { equals: true } }))\n const collection: CollectionConfig = {\n slug: 'posts',\n access: { read: documentRead },\n fields: [],\n }\n const config = {\n baseAccess: {\n collections: {\n read: () => ({ archived: { not_equals: true } }),\n },\n },\n } as Config\n\n addCollectionAccess({ config, scopes: [createScope(collection)] })\n\n expect(collection.access?.read).toBe(documentRead)\n await expect(config.baseAccess?.collections?.read?.(createArgs())).resolves.toEqual({\n and: [{ archived: { not_equals: true } }, { tenant: { in: ['tenant-1'] } }],\n })\n await expect(config.baseAccess?.collections?.read?.(createArgs('pages'))).resolves.toEqual({\n archived: { not_equals: true },\n })\n expect(documentRead).not.toHaveBeenCalled()\n })\n\n it('returns a boolean tenant result for collection create access', async () => {\n const collection: CollectionConfig = { slug: 'posts', fields: [] }\n const config = {} as Config\n\n addCollectionAccess({ config, scopes: [createScope(collection)] })\n\n await expect(config.baseAccess?.collections?.create?.(createArgs())).resolves.toBe(true)\n })\n\n it('keeps callback wrapping when an access result override is configured', async () => {\n const documentResult = { published: { equals: true } }\n const documentRead = vi.fn(() => documentResult)\n const accessResultCallback = vi.fn(({ accessResult }) => accessResult)\n const collection: CollectionConfig = {\n slug: 'posts',\n access: { read: documentRead },\n fields: [],\n }\n const config = {} as Config\n\n addCollectionAccess({\n config,\n scopes: [createScope(collection, accessResultCallback)],\n })\n\n expect(config.baseAccess).toBeUndefined()\n await expect(collection.access?.read?.(createArgs())).resolves.toEqual({\n and: [documentResult, { tenant: { in: ['tenant-1'] } }],\n })\n expect(accessResultCallback).toHaveBeenCalledWith(\n expect.objectContaining({ accessKey: 'read' }),\n )\n })\n})\n"],"names":["describe","expect","it","vi","addCollectionAccess","createScope","collection","accessResultCallback","adminUsersSlug","fieldName","userHasAccessToAllTenants","createArgs","slug","req","user","id","tenants","tenant","documentRead","fn","published","equals","access","read","fields","config","baseAccess","collections","archived","not_equals","scopes","toBe","resolves","toEqual","and","in","not","toHaveBeenCalled","create","documentResult","accessResult","toBeUndefined","toHaveBeenCalledWith","objectContaining","accessKey"],"mappings":"AAEA,SAASA,QAAQ,EAAEC,MAAM,EAAEC,EAAE,EAAEC,EAAE,QAAQ,SAAQ;AAIjD,SAASC,mBAAmB,QAAQ,2BAA0B;AAE9D,MAAMC,cAAc,CAClBC,YACAC,uBACwB,CAAA;QACxBA;QACAC,gBAAgB;QAChBF;QACAG,WAAW;QACXC,2BAA2B,IAAM;IACnC,CAAA;AAEA,MAAMC,aAAa,CAACC,OAAO,OAAO,GAAkB,CAAA;QAClDC,KAAK;YACHC,MAAM;gBACJR,YAAY;gBACZS,IAAI;gBACJC,SAAS;oBAAC;wBAAEC,QAAQ;oBAAW;iBAAE;YACnC;QACF;QACAL;IACF,CAAA;AAEAZ,SAAS,uBAAuB;IAC9BE,GAAG,mFAAmF;QACpF,MAAMgB,eAAef,GAAGgB,EAAE,CAAC,IAAO,CAAA;gBAAEC,WAAW;oBAAEC,QAAQ;gBAAK;YAAE,CAAA;QAChE,MAAMf,aAA+B;YACnCM,MAAM;YACNU,QAAQ;gBAAEC,MAAML;YAAa;YAC7BM,QAAQ,EAAE;QACZ;QACA,MAAMC,SAAS;YACbC,YAAY;gBACVC,aAAa;oBACXJ,MAAM,IAAO,CAAA;4BAAEK,UAAU;gCAAEC,YAAY;4BAAK;wBAAE,CAAA;gBAChD;YACF;QACF;QAEAzB,oBAAoB;YAAEqB;YAAQK,QAAQ;gBAACzB,YAAYC;aAAY;QAAC;QAEhEL,OAAOK,WAAWgB,MAAM,EAAEC,MAAMQ,IAAI,CAACb;QACrC,MAAMjB,OAAOwB,OAAOC,UAAU,EAAEC,aAAaJ,OAAOZ,eAAeqB,QAAQ,CAACC,OAAO,CAAC;YAClFC,KAAK;gBAAC;oBAAEN,UAAU;wBAAEC,YAAY;oBAAK;gBAAE;gBAAG;oBAAEZ,QAAQ;wBAAEkB,IAAI;4BAAC;yBAAW;oBAAC;gBAAE;aAAE;QAC7E;QACA,MAAMlC,OAAOwB,OAAOC,UAAU,EAAEC,aAAaJ,OAAOZ,WAAW,WAAWqB,QAAQ,CAACC,OAAO,CAAC;YACzFL,UAAU;gBAAEC,YAAY;YAAK;QAC/B;QACA5B,OAAOiB,cAAckB,GAAG,CAACC,gBAAgB;IAC3C;IAEAnC,GAAG,gEAAgE;QACjE,MAAMI,aAA+B;YAAEM,MAAM;YAASY,QAAQ,EAAE;QAAC;QACjE,MAAMC,SAAS,CAAC;QAEhBrB,oBAAoB;YAAEqB;YAAQK,QAAQ;gBAACzB,YAAYC;aAAY;QAAC;QAEhE,MAAML,OAAOwB,OAAOC,UAAU,EAAEC,aAAaW,SAAS3B,eAAeqB,QAAQ,CAACD,IAAI,CAAC;IACrF;IAEA7B,GAAG,wEAAwE;QACzE,MAAMqC,iBAAiB;YAAEnB,WAAW;gBAAEC,QAAQ;YAAK;QAAE;QACrD,MAAMH,eAAef,GAAGgB,EAAE,CAAC,IAAMoB;QACjC,MAAMhC,uBAAuBJ,GAAGgB,EAAE,CAAC,CAAC,EAAEqB,YAAY,EAAE,GAAKA;QACzD,MAAMlC,aAA+B;YACnCM,MAAM;YACNU,QAAQ;gBAAEC,MAAML;YAAa;YAC7BM,QAAQ,EAAE;QACZ;QACA,MAAMC,SAAS,CAAC;QAEhBrB,oBAAoB;YAClBqB;YACAK,QAAQ;gBAACzB,YAAYC,YAAYC;aAAsB;QACzD;QAEAN,OAAOwB,OAAOC,UAAU,EAAEe,aAAa;QACvC,MAAMxC,OAAOK,WAAWgB,MAAM,EAAEC,OAAOZ,eAAeqB,QAAQ,CAACC,OAAO,CAAC;YACrEC,KAAK;gBAACK;gBAAgB;oBAAEtB,QAAQ;wBAAEkB,IAAI;4BAAC;yBAAW;oBAAC;gBAAE;aAAE;QACzD;QACAlC,OAAOM,sBAAsBmC,oBAAoB,CAC/CzC,OAAO0C,gBAAgB,CAAC;YAAEC,WAAW;QAAO;IAEhD;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"combineFilters.d.ts","sourceRoot":"","sources":["../../src/utilities/combineFilters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAS,MAAM,SAAS,CAAA;AAEhD,KAAK,IAAI,GAAG;IACV,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,YAAY,EAAE,UAAU,CAAA;CACzB,CAAA;AACD;;;;GAIG;AACH,eAAO,MAAM,cAAc,
|
|
1
|
+
{"version":3,"file":"combineFilters.d.ts","sourceRoot":"","sources":["../../src/utilities/combineFilters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAS,MAAM,SAAS,CAAA;AAEhD,KAAK,IAAI,GAAG;IACV,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,YAAY,EAAE,UAAU,CAAA;CACzB,CAAA;AACD;;;;GAIG;AACH,eAAO,MAAM,cAAc,iCACM,IAAI,KAAG,UA8BrC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extractID.d.ts","sourceRoot":"","sources":["../../src/utilities/extractID.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEzC,eAAO,MAAM,SAAS,GAAI,MAAM,SAAS,MAAM,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"extractID.d.ts","sourceRoot":"","sources":["../../src/utilities/extractID.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEzC,eAAO,MAAM,SAAS,GAAI,MAAM,SAAS,MAAM,GAAG,MAAM,cAC1C,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,KAClC,MAMF,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateCookie.d.ts","sourceRoot":"","sources":["../../src/utilities/generateCookie.ts"],"names":[],"mappings":"AAAA,KAAK,aAAa,GAAG;IACnB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,IAAI,CAAA;IACd,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,oBAAoB,EAAE,OAAO,CAAA;IAC7B,QAAQ,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAA;IACpC,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAED,KAAK,YAAY,GAAG;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAA;IACpC,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;CAC1B,CAAA;AAED,eAAO,MAAM,cAAc,GAAI,oBAAoB,GAAG,OAAO,
|
|
1
|
+
{"version":3,"file":"generateCookie.d.ts","sourceRoot":"","sources":["../../src/utilities/generateCookie.ts"],"names":[],"mappings":"AAAA,KAAK,aAAa,GAAG;IACnB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,IAAI,CAAA;IACd,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,oBAAoB,EAAE,OAAO,CAAA;IAC7B,QAAQ,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAA;IACpC,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAED,KAAK,YAAY,GAAG;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAA;IACpC,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;CAC1B,CAAA;AAED,eAAO,MAAM,cAAc,GAAI,oBAAoB,GAAG,OAAO,QACrD,aAAa,KAClB,oBAAoB,SAAS,IAAI,GAAG,YAAY,GAAG,MA6ErD,CAAA"}
|
|
@@ -3,6 +3,6 @@ type Args = {
|
|
|
3
3
|
collectionSlug: CollectionSlug;
|
|
4
4
|
payload: Payload;
|
|
5
5
|
};
|
|
6
|
-
export declare const getCollectionIDType: ({ collectionSlug, payload }: Args) =>
|
|
6
|
+
export declare const getCollectionIDType: ({ collectionSlug, payload }: Args) => 'number' | 'text';
|
|
7
7
|
export {};
|
|
8
8
|
//# sourceMappingURL=getCollectionIDType.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getCollectionIDType.d.ts","sourceRoot":"","sources":["../../src/utilities/getCollectionIDType.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAEtD,KAAK,IAAI,GAAG;IACV,cAAc,EAAE,cAAc,CAAA;IAC9B,OAAO,EAAE,OAAO,CAAA;CACjB,CAAA;AACD,eAAO,MAAM,mBAAmB,
|
|
1
|
+
{"version":3,"file":"getCollectionIDType.d.ts","sourceRoot":"","sources":["../../src/utilities/getCollectionIDType.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAEtD,KAAK,IAAI,GAAG;IACV,cAAc,EAAE,cAAc,CAAA;IAC9B,OAAO,EAAE,OAAO,CAAA;CACjB,CAAA;AACD,eAAO,MAAM,mBAAmB,gCAAiC,IAAI,KAAG,QAAQ,GAAG,MAElF,CAAA"}
|
|
@@ -7,6 +7,6 @@ export declare const getTenantOptions: ({ payload, tenantsArrayFieldName, tenant
|
|
|
7
7
|
tenantsCollectionSlug: string;
|
|
8
8
|
useAsTitle: string;
|
|
9
9
|
user: User;
|
|
10
|
-
userHasAccessToAllTenants: Required<MultiTenantPluginConfig>[
|
|
10
|
+
userHasAccessToAllTenants: Required<MultiTenantPluginConfig>['userHasAccessToAllTenants'];
|
|
11
11
|
}) => Promise<OptionObject[]>;
|
|
12
12
|
//# sourceMappingURL=getTenantOptions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getTenantOptions.d.ts","sourceRoot":"","sources":["../../src/utilities/getTenantOptions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAE1D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAA;AAE1D,eAAO,MAAM,gBAAgB,
|
|
1
|
+
{"version":3,"file":"getTenantOptions.d.ts","sourceRoot":"","sources":["../../src/utilities/getTenantOptions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAE1D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAA;AAE1D,eAAO,MAAM,gBAAgB,yIAQ1B;IACD,OAAO,EAAE,OAAO,CAAA;IAChB,qBAAqB,EAAE,MAAM,CAAA;IAC7B,2BAA2B,EAAE,MAAM,CAAA;IACnC,qBAAqB,EAAE,MAAM,CAAA;IAC7B,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,IAAI,CAAA;IACV,yBAAyB,EAAE,QAAQ,CAAC,uBAAuB,CAAC,CAAC,2BAA2B,CAAC,CAAA;CAC1F,KAAG,OAAO,CAAC,YAAY,EAAE,CAuDzB,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getUserTenantIDs.d.ts","sourceRoot":"","sources":["../../src/utilities/getUserTenantIDs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAU,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAK/D;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,GAAI,MAAM,SAAS,MAAM,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"getUserTenantIDs.d.ts","sourceRoot":"","sources":["../../src/utilities/getUserTenantIDs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAU,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAK/D;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,GAAI,MAAM,SAAS,MAAM,GAAG,MAAM,QACvD,IAAI,GAAG,oBAAoB,YACvB;IACR,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,2BAA2B,CAAC,EAAE,MAAM,CAAA;CACrC,KACA,MAAM,EAoBR,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"miniChalk.d.ts","sourceRoot":"","sources":["../../src/utilities/miniChalk.ts"],"names":[],"mappings":"AAmBA,eAAO,MAAM,SAAS;
|
|
1
|
+
{"version":3,"file":"miniChalk.d.ts","sourceRoot":"","sources":["../../src/utilities/miniChalk.ts"],"names":[],"mappings":"AAmBA,eAAO,MAAM,SAAS;IACpB,IAAI,QAAQ,MAAM;IAClB,IAAI,QAAQ,MAAM;IAClB,IAAI,QAAQ,MAAM;IAClB,GAAG,QAAQ,MAAM;IACjB,KAAK,QAAQ,MAAM;IACnB,OAAO,QAAQ,MAAM;IACrB,GAAG,QAAQ,MAAM;IACjB,SAAS,QAAQ,MAAM;IACvB,KAAK,QAAQ,MAAM;IACnB,MAAM,QAAQ,MAAM;IAGpB,OAAO,QAAQ,MAAM;IACrB,UAAU,QAAQ,MAAM;CACzB,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@payloadcms/plugin-multi-tenant",
|
|
3
|
-
"version": "4.0.0-internal.
|
|
3
|
+
"version": "4.0.0-internal.fec2230",
|
|
4
4
|
"description": "Multi Tenant plugin for Payload",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"payload",
|
|
@@ -26,7 +26,6 @@
|
|
|
26
26
|
}
|
|
27
27
|
],
|
|
28
28
|
"sideEffects": [
|
|
29
|
-
"*.scss",
|
|
30
29
|
"*.css"
|
|
31
30
|
],
|
|
32
31
|
"type": "module",
|
|
@@ -80,14 +79,14 @@
|
|
|
80
79
|
"types.d.ts"
|
|
81
80
|
],
|
|
82
81
|
"devDependencies": {
|
|
83
|
-
"@payloadcms/translations": "4.0.0-internal.
|
|
82
|
+
"@payloadcms/translations": "4.0.0-internal.fec2230",
|
|
84
83
|
"@payloadcms/eslint-config": "3.28.0",
|
|
85
|
-
"
|
|
86
|
-
"
|
|
84
|
+
"payload": "4.0.0-internal.fec2230",
|
|
85
|
+
"@payloadcms/ui": "4.0.0-internal.fec2230"
|
|
87
86
|
},
|
|
88
87
|
"peerDependencies": {
|
|
89
|
-
"@payloadcms/ui": "4.0.0-internal.
|
|
90
|
-
"payload": "4.0.0-internal.
|
|
88
|
+
"@payloadcms/ui": "4.0.0-internal.fec2230",
|
|
89
|
+
"payload": "4.0.0-internal.fec2230"
|
|
91
90
|
},
|
|
92
91
|
"homepage:": "https://payloadcms.com",
|
|
93
92
|
"scripts": {
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"combineWhereConstraints.d.ts","sourceRoot":"","sources":["../../src/utilities/combineWhereConstraints.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAEpC,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,CAgBxE"}
|