@contember/engine-content-api 1.0.0-alpha.1 → 1.0.0-alpha.10
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/src/acl/VariableUtils.d.ts +5 -1
- package/dist/src/acl/VariableUtils.d.ts.map +1 -1
- package/dist/src/acl/VariableUtils.js +25 -7
- package/dist/src/acl/VariableUtils.js.map +1 -1
- package/dist/src/introspection/content-schema.types.d.ts +1 -4
- package/dist/src/introspection/content-schema.types.d.ts.map +1 -1
- package/dist/src/tsconfig.tsbuildinfo +1 -1
- package/dist/tests/cases/unit/aclVariablesFactory.test.d.ts +2 -0
- package/dist/tests/cases/unit/aclVariablesFactory.test.d.ts.map +1 -0
- package/dist/tests/cases/unit/aclVariablesFactory.test.js +86 -0
- package/dist/tests/cases/unit/aclVariablesFactory.test.js.map +1 -0
- package/dist/tests/tsconfig.tsbuildinfo +1 -1
- package/package.json +12 -11
- package/src/acl/VariableUtils.ts +34 -10
- package/src/introspection/content-schema.types.ts +0 -5
- package/tests/cases/unit/aclVariablesFactory.test.ts +73 -0
package/package.json
CHANGED
|
@@ -1,27 +1,28 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@contember/engine-content-api",
|
|
3
|
-
"version": "1.0.0-alpha.
|
|
3
|
+
"version": "1.0.0-alpha.10",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"main": "dist/src/index.js",
|
|
6
6
|
"typings": "dist/src/index.d.ts",
|
|
7
7
|
"scripts": {
|
|
8
|
-
"
|
|
8
|
+
"build-copy": "mkdir -p dist && find ./tests/ -name '*.gql' -type f -exec cp --parents {} ./dist \\;",
|
|
9
|
+
"generate": "gql-gen --config graphql.codegen.yml",
|
|
9
10
|
"test": "uvu dist/tests/cases/ \\.js$"
|
|
10
11
|
},
|
|
11
12
|
"dependencies": {
|
|
12
|
-
"@contember/database": "^1.0.0-alpha.
|
|
13
|
-
"@contember/dic": "^1.0.0-alpha.
|
|
14
|
-
"@contember/engine-common": "^1.0.0-alpha.
|
|
15
|
-
"@contember/graphql-utils": "^1.0.0-alpha.
|
|
16
|
-
"@contember/schema": "^1.0.0-alpha.
|
|
17
|
-
"@contember/schema-utils": "^1.0.0-alpha.
|
|
13
|
+
"@contember/database": "^1.0.0-alpha.10",
|
|
14
|
+
"@contember/dic": "^1.0.0-alpha.10",
|
|
15
|
+
"@contember/engine-common": "^1.0.0-alpha.10",
|
|
16
|
+
"@contember/graphql-utils": "^1.0.0-alpha.10",
|
|
17
|
+
"@contember/schema": "^1.0.0-alpha.10",
|
|
18
|
+
"@contember/schema-utils": "^1.0.0-alpha.10",
|
|
18
19
|
"@graphql-tools/schema": "^7.1.5",
|
|
19
20
|
"graphql-tag": "^2.12.5"
|
|
20
21
|
},
|
|
21
22
|
"devDependencies": {
|
|
22
|
-
"@contember/database-tester": "^1.0.0-alpha.
|
|
23
|
-
"@contember/engine-api-tester": "^1.0.0-alpha.
|
|
24
|
-
"@contember/schema-definition": "^1.0.0-alpha.
|
|
23
|
+
"@contember/database-tester": "^1.0.0-alpha.10",
|
|
24
|
+
"@contember/engine-api-tester": "^1.0.0-alpha.10",
|
|
25
|
+
"@contember/schema-definition": "^1.0.0-alpha.10",
|
|
25
26
|
"@graphql-codegen/cli": "^1.15.2",
|
|
26
27
|
"@graphql-codegen/typescript": "^1.15.2",
|
|
27
28
|
"@graphql-codegen/typescript-operations": "^1.15.2",
|
package/src/acl/VariableUtils.ts
CHANGED
|
@@ -1,17 +1,41 @@
|
|
|
1
1
|
import { Acl } from '@contember/schema'
|
|
2
|
+
import { getRoleVariables } from '@contember/schema-utils'
|
|
2
3
|
|
|
3
4
|
type Memberships = readonly { role: string; variables: readonly { name: string; values: readonly string[] }[] }[]
|
|
4
5
|
|
|
5
|
-
export const
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
6
|
+
export const createAclVariables = (
|
|
7
|
+
aclSchema: Acl.Schema,
|
|
8
|
+
identity: {
|
|
9
|
+
identityId: string
|
|
10
|
+
personId: string | null
|
|
11
|
+
memberships: Memberships
|
|
12
|
+
},
|
|
13
|
+
): Acl.VariablesMap => {
|
|
14
|
+
|
|
15
|
+
const variablesEntries = identity.memberships.flatMap(
|
|
16
|
+
membership => {
|
|
17
|
+
const roleVariables = getRoleVariables(membership.role, aclSchema)
|
|
18
|
+
const membershipVariablesMap = Object.fromEntries(membership.variables.map(it => [it.name, it.values]))
|
|
19
|
+
|
|
20
|
+
return Object.entries(roleVariables).map(([name, def]) => {
|
|
21
|
+
const prefixed = prefixVariable(membership.role, name)
|
|
22
|
+
|
|
23
|
+
switch (def.type) {
|
|
24
|
+
case Acl.VariableType.entity:
|
|
25
|
+
return [prefixed, membershipVariablesMap[name] ?? []]
|
|
26
|
+
case Acl.VariableType.predefined:
|
|
27
|
+
switch (def.value) {
|
|
28
|
+
case 'identityID':
|
|
29
|
+
return [prefixed, [identity.identityId]]
|
|
30
|
+
case 'personID':
|
|
31
|
+
return [prefixed, identity.personId ? [identity.personId] : []]
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
})
|
|
35
|
+
},
|
|
15
36
|
)
|
|
37
|
+
|
|
38
|
+
return Object.fromEntries(variablesEntries)
|
|
16
39
|
}
|
|
40
|
+
|
|
17
41
|
export const prefixVariable = (role: string, variableName: string) => `${role}__${variableName}`
|
|
@@ -141,10 +141,6 @@ export type _ValidatorArgument = {
|
|
|
141
141
|
export type ResolverTypeWrapper<T> = Promise<T> | T
|
|
142
142
|
|
|
143
143
|
|
|
144
|
-
export type ResolverWithResolve<TResult, TParent, TContext, TArgs> = {
|
|
145
|
-
resolve: ResolverFn<TResult, TParent, TContext, TArgs>
|
|
146
|
-
}
|
|
147
|
-
|
|
148
144
|
export type LegacyStitchingResolver<TResult, TParent, TContext, TArgs> = {
|
|
149
145
|
fragment: string
|
|
150
146
|
resolve: ResolverFn<TResult, TParent, TContext, TArgs>
|
|
@@ -157,7 +153,6 @@ export type NewStitchingResolver<TResult, TParent, TContext, TArgs> = {
|
|
|
157
153
|
export type StitchingResolver<TResult, TParent, TContext, TArgs> = LegacyStitchingResolver<TResult, TParent, TContext, TArgs> | NewStitchingResolver<TResult, TParent, TContext, TArgs>
|
|
158
154
|
export type Resolver<TResult, TParent = {}, TContext = {}, TArgs = {}> =
|
|
159
155
|
| ResolverFn<TResult, TParent, TContext, TArgs>
|
|
160
|
-
| ResolverWithResolve<TResult, TParent, TContext, TArgs>
|
|
161
156
|
| StitchingResolver<TResult, TParent, TContext, TArgs>
|
|
162
157
|
|
|
163
158
|
export type ResolverFn<TResult, TParent, TContext, TArgs> = (
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import * as assert from 'uvu/assert'
|
|
2
|
+
import { suite } from 'uvu'
|
|
3
|
+
import { createAclVariables } from '../../../src'
|
|
4
|
+
import { Acl } from '@contember/schema'
|
|
5
|
+
import { testUuid } from '@contember/engine-api-tester'
|
|
6
|
+
|
|
7
|
+
const createAclVariablesTest = suite('create acl variables')
|
|
8
|
+
|
|
9
|
+
createAclVariablesTest('prefix from memberships', () => {
|
|
10
|
+
assert.equal(createAclVariables({
|
|
11
|
+
roles: {
|
|
12
|
+
author: {
|
|
13
|
+
stages: '*',
|
|
14
|
+
variables: {
|
|
15
|
+
authorID: { type: Acl.VariableType.entity, entityName: 'Author' },
|
|
16
|
+
},
|
|
17
|
+
entities: {
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
}, {
|
|
22
|
+
identityId: testUuid(1),
|
|
23
|
+
personId: null,
|
|
24
|
+
memberships: [{ role: 'author', variables: [{ name: 'authorID', values: [testUuid(2)] }] }],
|
|
25
|
+
}), {
|
|
26
|
+
author__authorID: [testUuid(2)],
|
|
27
|
+
})
|
|
28
|
+
})
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
createAclVariablesTest('undefined variable', () => {
|
|
32
|
+
assert.equal(createAclVariables({
|
|
33
|
+
roles: {
|
|
34
|
+
author: {
|
|
35
|
+
stages: '*',
|
|
36
|
+
variables: {
|
|
37
|
+
authorID: { type: Acl.VariableType.entity, entityName: 'Author' },
|
|
38
|
+
},
|
|
39
|
+
entities: {},
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
}, {
|
|
43
|
+
identityId: testUuid(1),
|
|
44
|
+
personId: null,
|
|
45
|
+
memberships: [{ role: 'author', variables: [] }],
|
|
46
|
+
}), {
|
|
47
|
+
author__authorID: [],
|
|
48
|
+
})
|
|
49
|
+
})
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
createAclVariablesTest('predefined', () => {
|
|
53
|
+
assert.equal(createAclVariables({
|
|
54
|
+
roles: {
|
|
55
|
+
author: {
|
|
56
|
+
stages: '*',
|
|
57
|
+
variables: {
|
|
58
|
+
authorIdentity: { type: Acl.VariableType.predefined, value: 'identityID' },
|
|
59
|
+
},
|
|
60
|
+
entities: {},
|
|
61
|
+
},
|
|
62
|
+
},
|
|
63
|
+
}, {
|
|
64
|
+
identityId: testUuid(1),
|
|
65
|
+
personId: null,
|
|
66
|
+
memberships: [{ role: 'author', variables: [] }],
|
|
67
|
+
}), {
|
|
68
|
+
author__authorIdentity: [testUuid(1)],
|
|
69
|
+
})
|
|
70
|
+
})
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
createAclVariablesTest.run()
|