@contember/engine-content-api 1.0.0-rc.9 → 1.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/src/acl/Authorizator.d.ts +8 -3
- package/dist/src/acl/Authorizator.d.ts.map +1 -1
- package/dist/src/acl/Authorizator.js +46 -0
- package/dist/src/acl/Authorizator.js.map +1 -1
- package/dist/src/acl/index.d.ts +0 -1
- package/dist/src/acl/index.d.ts.map +1 -1
- package/dist/src/acl/index.js +0 -1
- package/dist/src/acl/index.js.map +1 -1
- package/dist/src/introspection/IntrospectionSchemaFactory.js +2 -2
- package/dist/src/introspection/IntrospectionSchemaFactory.js.map +1 -1
- package/dist/src/mapper/select/SelectBuilder.d.ts.map +1 -1
- package/dist/src/mapper/select/SelectBuilder.js +1 -3
- package/dist/src/mapper/select/SelectBuilder.js.map +1 -1
- package/dist/src/resolvers/MutationResolver.d.ts.map +1 -1
- package/dist/src/resolvers/MutationResolver.js +4 -3
- package/dist/src/resolvers/MutationResolver.js.map +1 -1
- package/dist/src/schema/EntityTypeProvider.js +3 -3
- package/dist/src/schema/EntityTypeProvider.js.map +1 -1
- package/dist/src/schema/FieldAccessVisitor.js +2 -2
- package/dist/src/schema/FieldAccessVisitor.js.map +1 -1
- package/dist/src/schema/MutationProvider.js +2 -2
- package/dist/src/schema/MutationProvider.js.map +1 -1
- package/dist/src/schema/QueryProvider.js +1 -1
- package/dist/src/schema/QueryProvider.js.map +1 -1
- package/dist/src/schema/WhereTypeProvider.js +2 -2
- package/dist/src/schema/WhereTypeProvider.js.map +1 -1
- package/dist/src/schema/entities/FieldTypeVisitor.d.ts +5 -3
- package/dist/src/schema/entities/FieldTypeVisitor.d.ts.map +1 -1
- package/dist/src/schema/entities/FieldTypeVisitor.js +13 -2
- package/dist/src/schema/entities/FieldTypeVisitor.js.map +1 -1
- package/dist/src/schema/mutations/CreateEntityInputFieldVisitor.js +1 -1
- package/dist/src/schema/mutations/CreateEntityInputFieldVisitor.js.map +1 -1
- package/dist/src/schema/mutations/CreateEntityRelationAllowedOperationsVisitor.js +3 -3
- package/dist/src/schema/mutations/CreateEntityRelationAllowedOperationsVisitor.js.map +1 -1
- package/dist/src/schema/mutations/EntityInputProvider.js +1 -1
- package/dist/src/schema/mutations/EntityInputProvider.js.map +1 -1
- package/dist/src/schema/mutations/UpdateEntityInputFieldVisitor.js +1 -1
- package/dist/src/schema/mutations/UpdateEntityInputFieldVisitor.js.map +1 -1
- package/dist/src/schema/mutations/UpdateEntityRelationAllowedOperationsVisitor.d.ts.map +1 -1
- package/dist/src/schema/mutations/UpdateEntityRelationAllowedOperationsVisitor.js +5 -5
- package/dist/src/schema/mutations/UpdateEntityRelationAllowedOperationsVisitor.js.map +1 -1
- package/dist/src/schema/mutations/UpdateEntityRelationInputFieldVisitor.js +1 -1
- package/dist/src/schema/mutations/UpdateEntityRelationInputFieldVisitor.js.map +1 -1
- package/dist/src/tsconfig.tsbuildinfo +1 -1
- package/dist/tests/cases/integration/graphQlRequests/upsert/basicUpsert.test.js +45 -2
- package/dist/tests/cases/integration/graphQlRequests/upsert/basicUpsert.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlSchema/graphQlSchemaBuilder.test.js +45 -1
- package/dist/tests/cases/integration/graphQlSchema/graphQlSchemaBuilder.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlSchema/schema-acl-predicate.gql +110 -0
- package/dist/tests/cases/integration/graphQlSchema/schema-acl-predicate2.gql +110 -0
- package/dist/tests/src/test.js +1 -1
- package/dist/tests/src/test.js.map +1 -1
- package/dist/tests/tsconfig.tsbuildinfo +1 -1
- package/package.json +10 -10
- package/src/acl/Authorizator.ts +48 -4
- package/src/acl/index.ts +0 -1
- package/src/introspection/IntrospectionSchemaFactory.ts +2 -2
- package/src/mapper/select/SelectBuilder.ts +1 -3
- package/src/resolvers/MutationResolver.ts +4 -3
- package/src/schema/EntityTypeProvider.ts +3 -3
- package/src/schema/FieldAccessVisitor.ts +2 -2
- package/src/schema/MutationProvider.ts +2 -2
- package/src/schema/QueryProvider.ts +1 -1
- package/src/schema/WhereTypeProvider.ts +2 -2
- package/src/schema/entities/FieldTypeVisitor.ts +17 -8
- package/src/schema/mutations/CreateEntityInputFieldVisitor.ts +1 -1
- package/src/schema/mutations/CreateEntityRelationAllowedOperationsVisitor.ts +3 -3
- package/src/schema/mutations/EntityInputProvider.ts +1 -1
- package/src/schema/mutations/UpdateEntityInputFieldVisitor.ts +1 -1
- package/src/schema/mutations/UpdateEntityRelationAllowedOperationsVisitor.ts +5 -9
- package/src/schema/mutations/UpdateEntityRelationInputFieldVisitor.ts +1 -1
- package/tests/cases/integration/graphQlRequests/upsert/basicUpsert.test.ts +49 -2
- package/tests/cases/integration/graphQlSchema/graphQlSchemaBuilder.test.ts +57 -2
- package/tests/cases/integration/graphQlSchema/schema-acl-predicate.gql +110 -0
- package/tests/cases/integration/graphQlSchema/schema-acl-predicate2.gql +110 -0
- package/tests/src/test.ts +2 -2
- package/dist/src/acl/StaticAuthorizator.d.ts +0 -9
- package/dist/src/acl/StaticAuthorizator.d.ts.map +0 -1
- package/dist/src/acl/StaticAuthorizator.js +0 -32
- package/dist/src/acl/StaticAuthorizator.js.map +0 -1
- package/src/acl/StaticAuthorizator.ts +0 -29
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
type Query {
|
|
2
|
+
getTest(by: TestUniqueWhere!, filter: TestWhere): Test
|
|
3
|
+
listTest(filter: TestWhere, orderBy: [TestOrderBy!], offset: Int, limit: Int): [Test!]!
|
|
4
|
+
paginateTest(filter: TestWhere, orderBy: [TestOrderBy!], skip: Int, first: Int): TestConnection!
|
|
5
|
+
transaction: QueryTransaction
|
|
6
|
+
_info: Info
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
type Test {
|
|
10
|
+
_meta: TestMeta
|
|
11
|
+
id: UUID!
|
|
12
|
+
a: String!
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
type TestMeta {
|
|
16
|
+
id: FieldMeta
|
|
17
|
+
a: FieldMeta
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
type FieldMeta {
|
|
21
|
+
readable: Boolean
|
|
22
|
+
updatable: Boolean
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
scalar UUID
|
|
26
|
+
|
|
27
|
+
input TestUniqueWhere {
|
|
28
|
+
id: UUID
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
input TestWhere {
|
|
32
|
+
id: UUIDCondition
|
|
33
|
+
a: StringCondition
|
|
34
|
+
and: [TestWhere]
|
|
35
|
+
or: [TestWhere]
|
|
36
|
+
not: TestWhere
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
input UUIDCondition {
|
|
40
|
+
and: [UUIDCondition!]
|
|
41
|
+
or: [UUIDCondition!]
|
|
42
|
+
not: UUIDCondition
|
|
43
|
+
null: Boolean
|
|
44
|
+
isNull: Boolean
|
|
45
|
+
eq: UUID
|
|
46
|
+
notEq: UUID
|
|
47
|
+
in: [UUID!]
|
|
48
|
+
notIn: [UUID!]
|
|
49
|
+
lt: UUID
|
|
50
|
+
lte: UUID
|
|
51
|
+
gt: UUID
|
|
52
|
+
gte: UUID
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
input StringCondition {
|
|
56
|
+
and: [StringCondition!]
|
|
57
|
+
or: [StringCondition!]
|
|
58
|
+
not: StringCondition
|
|
59
|
+
null: Boolean
|
|
60
|
+
isNull: Boolean
|
|
61
|
+
eq: String
|
|
62
|
+
notEq: String
|
|
63
|
+
in: [String!]
|
|
64
|
+
notIn: [String!]
|
|
65
|
+
lt: String
|
|
66
|
+
lte: String
|
|
67
|
+
gt: String
|
|
68
|
+
gte: String
|
|
69
|
+
contains: String
|
|
70
|
+
startsWith: String
|
|
71
|
+
endsWith: String
|
|
72
|
+
containsCI: String
|
|
73
|
+
startsWithCI: String
|
|
74
|
+
endsWithCI: String
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
input TestOrderBy {
|
|
78
|
+
_random: Boolean
|
|
79
|
+
_randomSeeded: Int
|
|
80
|
+
id: OrderDirection
|
|
81
|
+
a: OrderDirection
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
enum OrderDirection {
|
|
85
|
+
asc
|
|
86
|
+
desc
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
type TestConnection {
|
|
90
|
+
pageInfo: PageInfo!
|
|
91
|
+
edges: [TestEdge!]!
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
type PageInfo {
|
|
95
|
+
totalCount: Int!
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
type TestEdge {
|
|
99
|
+
node: Test!
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
type QueryTransaction {
|
|
103
|
+
getTest(by: TestUniqueWhere!, filter: TestWhere): Test
|
|
104
|
+
listTest(filter: TestWhere, orderBy: [TestOrderBy!], offset: Int, limit: Int): [Test!]!
|
|
105
|
+
paginateTest(filter: TestWhere, orderBy: [TestOrderBy!], skip: Int, first: Int): TestConnection!
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
type Info {
|
|
109
|
+
description: String
|
|
110
|
+
}
|
package/tests/src/test.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Acl, Model, Schema, Validation } from '@contember/schema'
|
|
2
|
-
import { ExecutionContainerFactory, GraphQlSchemaBuilderFactory,
|
|
2
|
+
import { ExecutionContainerFactory, GraphQlSchemaBuilderFactory, Authorizator } from '../../src'
|
|
3
3
|
import { AllowAllPermissionFactory, emptySchema } from '@contember/schema-utils'
|
|
4
4
|
import { executeGraphQlTest } from './testGraphql'
|
|
5
5
|
import { Client } from '@contember/database'
|
|
@@ -89,7 +89,7 @@ export const failedTransaction = (executes: SqlQuery[]): SqlQuery[] => {
|
|
|
89
89
|
|
|
90
90
|
export const execute = async (test: Test) => {
|
|
91
91
|
const permissions: Acl.Permissions = test.permissions || new AllowAllPermissionFactory().create(test.schema)
|
|
92
|
-
const authorizator = new
|
|
92
|
+
const authorizator = new Authorizator(permissions)
|
|
93
93
|
const builder = new GraphQlSchemaBuilderFactory().create(test.schema, authorizator)
|
|
94
94
|
const graphQLSchema = builder.build()
|
|
95
95
|
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { Acl } from '@contember/schema';
|
|
2
|
-
import { Authorizator } from './Authorizator';
|
|
3
|
-
export declare class StaticAuthorizator implements Authorizator {
|
|
4
|
-
private readonly permissions;
|
|
5
|
-
constructor(permissions: Acl.Permissions);
|
|
6
|
-
isAllowed(operation: Acl.Operation, entity: string, field?: string): boolean;
|
|
7
|
-
isCustomPrimaryAllowed(entity: string): boolean;
|
|
8
|
-
}
|
|
9
|
-
//# sourceMappingURL=StaticAuthorizator.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"StaticAuthorizator.d.ts","sourceRoot":"","sources":["../../../src/acl/StaticAuthorizator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAA;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAE7C,qBAAa,kBAAmB,YAAW,YAAY;IAC1C,OAAO,CAAC,QAAQ,CAAC,WAAW;gBAAX,WAAW,EAAE,GAAG,CAAC,WAAW;IAEzD,SAAS,CAAC,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO;IAmB5E,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;CAG/C"}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.StaticAuthorizator = void 0;
|
|
4
|
-
const schema_1 = require("@contember/schema");
|
|
5
|
-
class StaticAuthorizator {
|
|
6
|
-
constructor(permissions) {
|
|
7
|
-
this.permissions = permissions;
|
|
8
|
-
}
|
|
9
|
-
isAllowed(operation, entity, field) {
|
|
10
|
-
if (!this.permissions[entity]) {
|
|
11
|
-
return false;
|
|
12
|
-
}
|
|
13
|
-
const entityPermissions = this.permissions[entity];
|
|
14
|
-
if (operation === schema_1.Acl.Operation.delete) {
|
|
15
|
-
return !!entityPermissions.operations.delete;
|
|
16
|
-
}
|
|
17
|
-
const fieldPermissions = entityPermissions.operations[operation];
|
|
18
|
-
if (!fieldPermissions) {
|
|
19
|
-
return false;
|
|
20
|
-
}
|
|
21
|
-
if (field) {
|
|
22
|
-
return !!fieldPermissions[field];
|
|
23
|
-
}
|
|
24
|
-
return Object.values(fieldPermissions).filter(it => !!it).length > 0;
|
|
25
|
-
}
|
|
26
|
-
isCustomPrimaryAllowed(entity) {
|
|
27
|
-
var _a, _b, _c;
|
|
28
|
-
return ((_c = (_b = (_a = this.permissions) === null || _a === void 0 ? void 0 : _a[entity]) === null || _b === void 0 ? void 0 : _b.operations) === null || _c === void 0 ? void 0 : _c.customPrimary) || false;
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
exports.StaticAuthorizator = StaticAuthorizator;
|
|
32
|
-
//# sourceMappingURL=StaticAuthorizator.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"StaticAuthorizator.js","sourceRoot":"","sources":["../../../src/acl/StaticAuthorizator.ts"],"names":[],"mappings":";;;AAAA,8CAAuC;AAGvC,MAAa,kBAAkB;IAC9B,YAA6B,WAA4B;QAA5B,gBAAW,GAAX,WAAW,CAAiB;IAAG,CAAC;IAE7D,SAAS,CAAC,SAAwB,EAAE,MAAc,EAAE,KAAc;QACjE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE;YAC9B,OAAO,KAAK,CAAA;SACZ;QACD,MAAM,iBAAiB,GAA0B,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;QAEzE,IAAI,SAAS,KAAK,YAAG,CAAC,SAAS,CAAC,MAAM,EAAE;YACvC,OAAO,CAAC,CAAC,iBAAiB,CAAC,UAAU,CAAC,MAAM,CAAA;SAC5C;QACD,MAAM,gBAAgB,GAAG,iBAAiB,CAAC,UAAU,CAAC,SAAS,CAAC,CAAA;QAChE,IAAI,CAAC,gBAAgB,EAAE;YACtB,OAAO,KAAK,CAAA;SACZ;QACD,IAAI,KAAK,EAAE;YACV,OAAO,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAA;SAChC;QACD,OAAO,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAA;IACrE,CAAC;IAED,sBAAsB,CAAC,MAAc;;QACpC,OAAO,CAAA,MAAA,MAAA,MAAA,IAAI,CAAC,WAAW,0CAAG,MAAM,CAAC,0CAAE,UAAU,0CAAE,aAAa,KAAI,KAAK,CAAA;IACtE,CAAC;CACD;AAzBD,gDAyBC"}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { Acl } from '@contember/schema'
|
|
2
|
-
import { Authorizator } from './Authorizator'
|
|
3
|
-
|
|
4
|
-
export class StaticAuthorizator implements Authorizator {
|
|
5
|
-
constructor(private readonly permissions: Acl.Permissions) {}
|
|
6
|
-
|
|
7
|
-
isAllowed(operation: Acl.Operation, entity: string, field?: string): boolean {
|
|
8
|
-
if (!this.permissions[entity]) {
|
|
9
|
-
return false
|
|
10
|
-
}
|
|
11
|
-
const entityPermissions: Acl.EntityPermissions = this.permissions[entity]
|
|
12
|
-
|
|
13
|
-
if (operation === Acl.Operation.delete) {
|
|
14
|
-
return !!entityPermissions.operations.delete
|
|
15
|
-
}
|
|
16
|
-
const fieldPermissions = entityPermissions.operations[operation]
|
|
17
|
-
if (!fieldPermissions) {
|
|
18
|
-
return false
|
|
19
|
-
}
|
|
20
|
-
if (field) {
|
|
21
|
-
return !!fieldPermissions[field]
|
|
22
|
-
}
|
|
23
|
-
return Object.values(fieldPermissions).filter(it => !!it).length > 0
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
isCustomPrimaryAllowed(entity: string): boolean {
|
|
27
|
-
return this.permissions?.[entity]?.operations?.customPrimary || false
|
|
28
|
-
}
|
|
29
|
-
}
|