@flowerforce/flowerbase 1.7.6-beta.6 → 1.7.6-beta.7
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fieldPermissions.d.ts","sourceRoot":"","sources":["../../../../src/utils/roles/machines/fieldPermissions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAElC,OAAO,EAGL,IAAI,EACL,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AA0C5C,eAAO,MAAM,0BAA0B,GAAI,OAAO,IAAI,YACN,CAAA;AAEhD,eAAO,MAAM,gCAAgC,GAC3C,SAAS,IAAI,CAAC,cAAc,EAAE,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC,EACzD,MAAM,MAAM,GAAG,OAAO,EACtB,UAAU;IACR,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB,KACA,OAAO,CAAC,QAAQ,
|
|
1
|
+
{"version":3,"file":"fieldPermissions.d.ts","sourceRoot":"","sources":["../../../../src/utils/roles/machines/fieldPermissions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAElC,OAAO,EAGL,IAAI,EACL,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AA0C5C,eAAO,MAAM,0BAA0B,GAAI,OAAO,IAAI,YACN,CAAA;AAEhD,eAAO,MAAM,gCAAgC,GAC3C,SAAS,IAAI,CAAC,cAAc,EAAE,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC,EACzD,MAAM,MAAM,GAAG,OAAO,EACtB,UAAU;IACR,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB,KACA,OAAO,CAAC,QAAQ,CAkClB,CAAA"}
|
|
@@ -46,6 +46,10 @@ const filterDocumentByFieldPermissions = (context, mode, options) => __awaiter(v
|
|
|
46
46
|
const fields = (_b = context.role.fields) !== null && _b !== void 0 ? _b : {};
|
|
47
47
|
const additionalFields = context.role.additional_fields;
|
|
48
48
|
for (const [key, value] of Object.entries(source)) {
|
|
49
|
+
if (mode === 'read' && key === '_id') {
|
|
50
|
+
document[key] = value;
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
49
53
|
const fieldPermission = fields[key];
|
|
50
54
|
const permission = fieldPermission !== null && fieldPermission !== void 0 ? fieldPermission : getAdditionalFieldPermission(additionalFields, key);
|
|
51
55
|
let allowed = (options === null || options === void 0 ? void 0 : options.defaultAllow) === true;
|
package/package.json
CHANGED
|
@@ -32,6 +32,7 @@ describe('checkIsValidFieldNameFn', () => {
|
|
|
32
32
|
|
|
33
33
|
const result = await checkIsValidFieldNameFn(context)
|
|
34
34
|
expect(result).toEqual({
|
|
35
|
+
_id: mockId,
|
|
35
36
|
name: 'Alice'
|
|
36
37
|
})
|
|
37
38
|
})
|
|
@@ -55,6 +56,7 @@ describe('checkIsValidFieldNameFn', () => {
|
|
|
55
56
|
|
|
56
57
|
const result = await checkIsValidFieldNameFn(context)
|
|
57
58
|
expect(result).toEqual({
|
|
59
|
+
_id: mockId,
|
|
58
60
|
phone: '123456789'
|
|
59
61
|
})
|
|
60
62
|
})
|
|
@@ -74,17 +76,41 @@ describe('checkIsValidFieldNameFn', () => {
|
|
|
74
76
|
role: mockedRole,
|
|
75
77
|
params: {
|
|
76
78
|
type: 'read',
|
|
77
|
-
cursor: { avatar: 'avatar.png', name: 'Alice' }
|
|
79
|
+
cursor: { _id: mockId, avatar: 'avatar.png', name: 'Alice' }
|
|
78
80
|
}
|
|
79
81
|
} as MachineContext
|
|
80
82
|
|
|
81
83
|
const result = await checkIsValidFieldNameFn(context)
|
|
82
84
|
expect(result).toEqual({
|
|
85
|
+
_id: mockId,
|
|
83
86
|
avatar: 'avatar.png',
|
|
84
87
|
name: 'Alice'
|
|
85
88
|
})
|
|
86
89
|
})
|
|
87
90
|
|
|
91
|
+
it('always keeps _id in read results even when no field read rule is defined', async () => {
|
|
92
|
+
const mockedRole = {
|
|
93
|
+
name: 'test',
|
|
94
|
+
apply_when: { '%%true': true },
|
|
95
|
+
fields: {
|
|
96
|
+
name: { read: true }
|
|
97
|
+
}
|
|
98
|
+
} as Role
|
|
99
|
+
const context = {
|
|
100
|
+
user: mockUser,
|
|
101
|
+
role: mockedRole,
|
|
102
|
+
params: {
|
|
103
|
+
type: 'read',
|
|
104
|
+
cursor: { _id: mockId, email: 'alice@example.com' }
|
|
105
|
+
}
|
|
106
|
+
} as MachineContext
|
|
107
|
+
|
|
108
|
+
const result = await checkIsValidFieldNameFn(context)
|
|
109
|
+
expect(result).toEqual({
|
|
110
|
+
_id: mockId
|
|
111
|
+
})
|
|
112
|
+
})
|
|
113
|
+
|
|
88
114
|
it('supports realm-style global additional_fields fallback', async () => {
|
|
89
115
|
const mockedRole = {
|
|
90
116
|
name: 'collaborator',
|
|
@@ -146,6 +172,8 @@ describe('checkIsValidFieldNameFn', () => {
|
|
|
146
172
|
} as MachineContext
|
|
147
173
|
|
|
148
174
|
const result = await checkIsValidFieldNameFn(context)
|
|
149
|
-
expect(result).toEqual({
|
|
175
|
+
expect(result).toEqual({
|
|
176
|
+
_id: mockId
|
|
177
|
+
})
|
|
150
178
|
})
|
|
151
179
|
})
|
|
@@ -65,6 +65,11 @@ export const filterDocumentByFieldPermissions = async (
|
|
|
65
65
|
const additionalFields = context.role.additional_fields
|
|
66
66
|
|
|
67
67
|
for (const [key, value] of Object.entries(source)) {
|
|
68
|
+
if (mode === 'read' && key === '_id') {
|
|
69
|
+
document[key] = value
|
|
70
|
+
continue
|
|
71
|
+
}
|
|
72
|
+
|
|
68
73
|
const fieldPermission = fields[key]
|
|
69
74
|
const permission = fieldPermission ?? getAdditionalFieldPermission(additionalFields, key)
|
|
70
75
|
let allowed = options?.defaultAllow === true
|