@powerhousedao/reactor-api 5.1.0 → 5.2.0-staging.2
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/codegen.js +2 -2
- package/dist/codegen.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/src/graphql/auth/index.d.ts +2 -0
- package/dist/src/graphql/auth/index.d.ts.map +1 -0
- package/dist/src/graphql/auth/index.js +2 -0
- package/dist/src/graphql/auth/index.js.map +1 -0
- package/dist/src/graphql/auth/resolvers.d.ts +149 -0
- package/dist/src/graphql/auth/resolvers.d.ts.map +1 -0
- package/dist/src/graphql/auth/resolvers.js +173 -0
- package/dist/src/graphql/auth/resolvers.js.map +1 -0
- package/dist/src/graphql/auth/schema.graphql +173 -0
- package/dist/src/graphql/auth/subgraph.d.ts +177 -0
- package/dist/src/graphql/auth/subgraph.d.ts.map +1 -0
- package/dist/src/graphql/auth/subgraph.js +340 -0
- package/dist/src/graphql/auth/subgraph.js.map +1 -0
- package/dist/src/graphql/base-subgraph.d.ts +4 -1
- package/dist/src/graphql/base-subgraph.d.ts.map +1 -1
- package/dist/src/graphql/base-subgraph.js +4 -0
- package/dist/src/graphql/base-subgraph.js.map +1 -1
- package/dist/src/graphql/document-model-subgraph.d.ts +51 -0
- package/dist/src/graphql/document-model-subgraph.d.ts.map +1 -0
- package/dist/src/graphql/document-model-subgraph.js +104 -0
- package/dist/src/graphql/document-model-subgraph.js.map +1 -0
- package/dist/src/graphql/drive-subgraph.d.ts.map +1 -1
- package/dist/src/graphql/drive-subgraph.js +51 -10
- package/dist/src/graphql/drive-subgraph.js.map +1 -1
- package/dist/src/graphql/graphql-manager.d.ts +11 -3
- package/dist/src/graphql/graphql-manager.d.ts.map +1 -1
- package/dist/src/graphql/graphql-manager.js +72 -15
- package/dist/src/graphql/graphql-manager.js.map +1 -1
- package/dist/src/graphql/index.d.ts +1 -0
- package/dist/src/graphql/index.d.ts.map +1 -1
- package/dist/src/graphql/index.js +1 -0
- package/dist/src/graphql/index.js.map +1 -1
- package/dist/src/graphql/reactor/adapters.js +1 -1
- package/dist/src/graphql/reactor/adapters.js.map +1 -1
- package/dist/src/graphql/reactor/factory.d.ts +4 -4
- package/dist/src/graphql/reactor/factory.d.ts.map +1 -1
- package/dist/src/graphql/reactor/gen/graphql.d.ts +295 -64
- package/dist/src/graphql/reactor/gen/graphql.d.ts.map +1 -1
- package/dist/src/graphql/reactor/gen/graphql.js +121 -8
- package/dist/src/graphql/reactor/gen/graphql.js.map +1 -1
- package/dist/src/graphql/reactor/operations.graphql +253 -0
- package/dist/src/graphql/reactor/pubsub.d.ts +2 -2
- package/dist/src/graphql/reactor/pubsub.d.ts.map +1 -1
- package/dist/src/graphql/reactor/pubsub.js +2 -1
- package/dist/src/graphql/reactor/pubsub.js.map +1 -1
- package/dist/src/graphql/reactor/resolvers.d.ts +48 -17
- package/dist/src/graphql/reactor/resolvers.d.ts.map +1 -1
- package/dist/src/graphql/reactor/resolvers.js +114 -34
- package/dist/src/graphql/reactor/resolvers.js.map +1 -1
- package/dist/src/graphql/reactor/schema.graphql +429 -0
- package/dist/src/graphql/reactor/subgraph.d.ts +34 -0
- package/dist/src/graphql/reactor/subgraph.d.ts.map +1 -1
- package/dist/src/graphql/reactor/subgraph.js +325 -22
- package/dist/src/graphql/reactor/subgraph.js.map +1 -1
- package/dist/src/graphql/reactor/validation.d.ts +62 -62
- package/dist/src/graphql/system/system-subgraph.d.ts.map +1 -1
- package/dist/src/graphql/types.d.ts +5 -1
- package/dist/src/graphql/types.d.ts.map +1 -1
- package/dist/src/graphql/utils.js +1 -1
- package/dist/src/graphql/utils.js.map +1 -1
- package/dist/src/migrations/001_create_document_permissions.d.ts +4 -0
- package/dist/src/migrations/001_create_document_permissions.d.ts.map +1 -0
- package/dist/src/migrations/001_create_document_permissions.js +91 -0
- package/dist/src/migrations/001_create_document_permissions.js.map +1 -0
- package/dist/src/migrations/index.d.ts +10 -0
- package/dist/src/migrations/index.d.ts.map +1 -0
- package/dist/src/migrations/index.js +59 -0
- package/dist/src/migrations/index.js.map +1 -0
- package/dist/src/packages/util.js +1 -1
- package/dist/src/packages/util.js.map +1 -1
- package/dist/src/server.d.ts +17 -7
- package/dist/src/server.d.ts.map +1 -1
- package/dist/src/server.js +49 -27
- package/dist/src/server.js.map +1 -1
- package/dist/src/services/auth.service.d.ts +1 -0
- package/dist/src/services/auth.service.d.ts.map +1 -1
- package/dist/src/services/auth.service.js +32 -22
- package/dist/src/services/auth.service.js.map +1 -1
- package/dist/src/services/document-permission.service.d.ts +201 -0
- package/dist/src/services/document-permission.service.d.ts.map +1 -0
- package/dist/src/services/document-permission.service.js +636 -0
- package/dist/src/services/document-permission.service.js.map +1 -0
- package/dist/src/utils/create-schema.d.ts +5 -4
- package/dist/src/utils/create-schema.d.ts.map +1 -1
- package/dist/src/utils/create-schema.js +110 -4
- package/dist/src/utils/create-schema.js.map +1 -1
- package/dist/src/utils/db.d.ts +65 -1
- package/dist/src/utils/db.d.ts.map +1 -1
- package/dist/src/utils/db.js.map +1 -1
- package/dist/test/document-permission.service.test.d.ts +2 -0
- package/dist/test/document-permission.service.test.d.ts.map +1 -0
- package/dist/test/document-permission.service.test.js +480 -0
- package/dist/test/document-permission.service.test.js.map +1 -0
- package/dist/test/drive-subgraph-permissions.test.d.ts +2 -0
- package/dist/test/drive-subgraph-permissions.test.d.ts.map +1 -0
- package/dist/test/drive-subgraph-permissions.test.js +195 -0
- package/dist/test/drive-subgraph-permissions.test.js.map +1 -0
- package/dist/test/identity-integration.test.d.ts +2 -0
- package/dist/test/identity-integration.test.d.ts.map +1 -0
- package/dist/test/identity-integration.test.js +349 -0
- package/dist/test/identity-integration.test.js.map +1 -0
- package/dist/test/permissions-integration.test.d.ts +2 -0
- package/dist/test/permissions-integration.test.d.ts.map +1 -0
- package/dist/test/permissions-integration.test.js +421 -0
- package/dist/test/permissions-integration.test.js.map +1 -0
- package/dist/test/reactor-adapters.test.js +2 -2
- package/dist/test/reactor-adapters.test.js.map +1 -1
- package/dist/test/reactor-resolvers.test.js +24 -24
- package/dist/test/reactor-resolvers.test.js.map +1 -1
- package/dist/test/reactor-subgraph-permissions.test.d.ts +2 -0
- package/dist/test/reactor-subgraph-permissions.test.d.ts.map +1 -0
- package/dist/test/reactor-subgraph-permissions.test.js +400 -0
- package/dist/test/reactor-subgraph-permissions.test.js.map +1 -0
- package/dist/test/two-reactor-gql-sync.test.d.ts +2 -0
- package/dist/test/two-reactor-gql-sync.test.d.ts.map +1 -0
- package/dist/test/two-reactor-gql-sync.test.js +298 -0
- package/dist/test/two-reactor-gql-sync.test.js.map +1 -0
- package/dist/test/utils/gql-resolver-bridge.d.ts +12 -0
- package/dist/test/utils/gql-resolver-bridge.d.ts.map +1 -0
- package/dist/test/utils/gql-resolver-bridge.js +60 -0
- package/dist/test/utils/gql-resolver-bridge.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +11 -9
|
@@ -0,0 +1,636 @@
|
|
|
1
|
+
import { sql } from "kysely";
|
|
2
|
+
/**
|
|
3
|
+
* Service for managing document-level permissions.
|
|
4
|
+
*
|
|
5
|
+
* Permission levels for documents:
|
|
6
|
+
* - READ: Can fetch and read the document
|
|
7
|
+
* - WRITE: Can push updates and modify the document
|
|
8
|
+
* - ADMIN: Can manage document permissions and settings
|
|
9
|
+
*
|
|
10
|
+
* Operation permissions:
|
|
11
|
+
* - Users and groups can be granted permission to execute specific operations
|
|
12
|
+
*
|
|
13
|
+
* Global roles (via environment variables):
|
|
14
|
+
* - AUTH_ENABLED: Enables authorization checks
|
|
15
|
+
* - ADMINS: Comma-separated list of admin addresses (full access)
|
|
16
|
+
* - USERS: Comma-separated list of user addresses (read/write access)
|
|
17
|
+
* - GUESTS: Comma-separated list of guest addresses (read access)
|
|
18
|
+
*/
|
|
19
|
+
export class DocumentPermissionService {
|
|
20
|
+
db;
|
|
21
|
+
constructor(db) {
|
|
22
|
+
this.db = db;
|
|
23
|
+
}
|
|
24
|
+
// ============================================
|
|
25
|
+
// User Permission Operations
|
|
26
|
+
// ============================================
|
|
27
|
+
/**
|
|
28
|
+
* Get the permission level for a user on a specific document.
|
|
29
|
+
* Returns null if no permission is set.
|
|
30
|
+
*/
|
|
31
|
+
async getUserPermission(documentId, userAddress) {
|
|
32
|
+
const result = await this.db
|
|
33
|
+
.selectFrom("DocumentPermission")
|
|
34
|
+
.select("permission")
|
|
35
|
+
.where("documentId", "=", documentId)
|
|
36
|
+
.where("userAddress", "=", userAddress.toLowerCase())
|
|
37
|
+
.executeTakeFirst();
|
|
38
|
+
return result?.permission ?? null;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Get all permissions for a document
|
|
42
|
+
*/
|
|
43
|
+
async getDocumentPermissions(documentId) {
|
|
44
|
+
const results = await this.db
|
|
45
|
+
.selectFrom("DocumentPermission")
|
|
46
|
+
.select([
|
|
47
|
+
"documentId",
|
|
48
|
+
"userAddress",
|
|
49
|
+
"permission",
|
|
50
|
+
"grantedBy",
|
|
51
|
+
"createdAt",
|
|
52
|
+
"updatedAt",
|
|
53
|
+
])
|
|
54
|
+
.where("documentId", "=", documentId)
|
|
55
|
+
.execute();
|
|
56
|
+
return results;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Get all documents a user has explicit access to
|
|
60
|
+
*/
|
|
61
|
+
async getUserDocuments(userAddress) {
|
|
62
|
+
const results = await this.db
|
|
63
|
+
.selectFrom("DocumentPermission")
|
|
64
|
+
.select([
|
|
65
|
+
"documentId",
|
|
66
|
+
"userAddress",
|
|
67
|
+
"permission",
|
|
68
|
+
"grantedBy",
|
|
69
|
+
"createdAt",
|
|
70
|
+
"updatedAt",
|
|
71
|
+
])
|
|
72
|
+
.where("userAddress", "=", userAddress.toLowerCase())
|
|
73
|
+
.execute();
|
|
74
|
+
return results;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Grant or update a user's permission on a document.
|
|
78
|
+
*/
|
|
79
|
+
async grantPermission(documentId, userAddress, permission, grantedBy) {
|
|
80
|
+
const now = new Date();
|
|
81
|
+
const normalizedAddress = userAddress.toLowerCase();
|
|
82
|
+
await this.db
|
|
83
|
+
.insertInto("DocumentPermission")
|
|
84
|
+
.values({
|
|
85
|
+
documentId,
|
|
86
|
+
userAddress: normalizedAddress,
|
|
87
|
+
permission,
|
|
88
|
+
grantedBy: grantedBy.toLowerCase(),
|
|
89
|
+
createdAt: now,
|
|
90
|
+
updatedAt: now,
|
|
91
|
+
})
|
|
92
|
+
.onConflict((oc) => oc.columns(["documentId", "userAddress"]).doUpdateSet({
|
|
93
|
+
permission,
|
|
94
|
+
grantedBy: grantedBy.toLowerCase(),
|
|
95
|
+
updatedAt: now,
|
|
96
|
+
}))
|
|
97
|
+
.execute();
|
|
98
|
+
const result = await this.db
|
|
99
|
+
.selectFrom("DocumentPermission")
|
|
100
|
+
.select([
|
|
101
|
+
"documentId",
|
|
102
|
+
"userAddress",
|
|
103
|
+
"permission",
|
|
104
|
+
"grantedBy",
|
|
105
|
+
"createdAt",
|
|
106
|
+
"updatedAt",
|
|
107
|
+
])
|
|
108
|
+
.where("documentId", "=", documentId)
|
|
109
|
+
.where("userAddress", "=", normalizedAddress)
|
|
110
|
+
.executeTakeFirstOrThrow();
|
|
111
|
+
return result;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Revoke a user's permission on a document
|
|
115
|
+
*/
|
|
116
|
+
async revokePermission(documentId, userAddress) {
|
|
117
|
+
await this.db
|
|
118
|
+
.deleteFrom("DocumentPermission")
|
|
119
|
+
.where("documentId", "=", documentId)
|
|
120
|
+
.where("userAddress", "=", userAddress.toLowerCase())
|
|
121
|
+
.execute();
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Delete all permissions for a document (used when deleting a document)
|
|
125
|
+
*/
|
|
126
|
+
async deleteAllDocumentPermissions(documentId) {
|
|
127
|
+
await this.db
|
|
128
|
+
.deleteFrom("DocumentPermission")
|
|
129
|
+
.where("documentId", "=", documentId)
|
|
130
|
+
.execute();
|
|
131
|
+
await this.db
|
|
132
|
+
.deleteFrom("DocumentGroupPermission")
|
|
133
|
+
.where("documentId", "=", documentId)
|
|
134
|
+
.execute();
|
|
135
|
+
await this.db
|
|
136
|
+
.deleteFrom("OperationUserPermission")
|
|
137
|
+
.where("documentId", "=", documentId)
|
|
138
|
+
.execute();
|
|
139
|
+
await this.db
|
|
140
|
+
.deleteFrom("OperationGroupPermission")
|
|
141
|
+
.where("documentId", "=", documentId)
|
|
142
|
+
.execute();
|
|
143
|
+
}
|
|
144
|
+
// ============================================
|
|
145
|
+
// Access Control Checks
|
|
146
|
+
// ============================================
|
|
147
|
+
/**
|
|
148
|
+
* Check if a user can read a document.
|
|
149
|
+
* Returns true if user has READ, WRITE, or ADMIN permission (direct or via group)
|
|
150
|
+
*/
|
|
151
|
+
async canReadDocument(documentId, userAddress) {
|
|
152
|
+
if (!userAddress) {
|
|
153
|
+
return false;
|
|
154
|
+
}
|
|
155
|
+
// Check direct user permission
|
|
156
|
+
const directPermission = await this.getUserPermission(documentId, userAddress);
|
|
157
|
+
if (directPermission !== null) {
|
|
158
|
+
return true;
|
|
159
|
+
}
|
|
160
|
+
// Check group permission
|
|
161
|
+
const groupPermission = await this.getUserGroupPermission(documentId, userAddress);
|
|
162
|
+
return groupPermission !== null;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Check if a user can write to a document.
|
|
166
|
+
* Returns true if user has WRITE or ADMIN permission (direct or via group)
|
|
167
|
+
*/
|
|
168
|
+
async canWriteDocument(documentId, userAddress) {
|
|
169
|
+
if (!userAddress) {
|
|
170
|
+
return false;
|
|
171
|
+
}
|
|
172
|
+
// Check direct user permission
|
|
173
|
+
const directPermission = await this.getUserPermission(documentId, userAddress);
|
|
174
|
+
if (directPermission === "WRITE" || directPermission === "ADMIN") {
|
|
175
|
+
return true;
|
|
176
|
+
}
|
|
177
|
+
// Check group permission
|
|
178
|
+
const groupPermission = await this.getUserGroupPermission(documentId, userAddress);
|
|
179
|
+
return groupPermission === "WRITE" || groupPermission === "ADMIN";
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Check if a user can manage a document (change permissions, settings).
|
|
183
|
+
* Returns true if user has ADMIN permission (direct or via group)
|
|
184
|
+
*/
|
|
185
|
+
async canManageDocument(documentId, userAddress) {
|
|
186
|
+
if (!userAddress) {
|
|
187
|
+
return false;
|
|
188
|
+
}
|
|
189
|
+
// Check direct user permission
|
|
190
|
+
const directPermission = await this.getUserPermission(documentId, userAddress);
|
|
191
|
+
if (directPermission === "ADMIN") {
|
|
192
|
+
return true;
|
|
193
|
+
}
|
|
194
|
+
// Check group permission
|
|
195
|
+
const groupPermission = await this.getUserGroupPermission(documentId, userAddress);
|
|
196
|
+
return groupPermission === "ADMIN";
|
|
197
|
+
}
|
|
198
|
+
// ============================================
|
|
199
|
+
// Access Control Checks (With Parent Hierarchy)
|
|
200
|
+
// ============================================
|
|
201
|
+
/**
|
|
202
|
+
* Check if a user can read a document, including parent permission inheritance.
|
|
203
|
+
* Returns true if user has permission on the document OR any parent in the hierarchy.
|
|
204
|
+
*/
|
|
205
|
+
async canRead(documentId, userAddress, getParentIds) {
|
|
206
|
+
// Check if user has direct permission on this document
|
|
207
|
+
const canReadThis = await this.canReadDocument(documentId, userAddress);
|
|
208
|
+
if (canReadThis) {
|
|
209
|
+
return true;
|
|
210
|
+
}
|
|
211
|
+
// Check if user has permission on any parent (inheritance)
|
|
212
|
+
const parentIds = await getParentIds(documentId);
|
|
213
|
+
for (const parentId of parentIds) {
|
|
214
|
+
const canReadParent = await this.canRead(parentId, userAddress, getParentIds);
|
|
215
|
+
if (canReadParent) {
|
|
216
|
+
return true;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
return false;
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Check if a user can write to a document, including parent permission inheritance.
|
|
223
|
+
* Returns true if user has write permission on the document OR any parent in the hierarchy.
|
|
224
|
+
*/
|
|
225
|
+
async canWrite(documentId, userAddress, getParentIds) {
|
|
226
|
+
// Check if user has direct write permission on this document
|
|
227
|
+
const canWriteThis = await this.canWriteDocument(documentId, userAddress);
|
|
228
|
+
if (canWriteThis) {
|
|
229
|
+
return true;
|
|
230
|
+
}
|
|
231
|
+
// Check if user has write permission on any parent (inheritance)
|
|
232
|
+
const parentIds = await getParentIds(documentId);
|
|
233
|
+
for (const parentId of parentIds) {
|
|
234
|
+
const canWriteParent = await this.canWrite(parentId, userAddress, getParentIds);
|
|
235
|
+
if (canWriteParent) {
|
|
236
|
+
return true;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
return false;
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Filter a list of document IDs to only include those the user can read.
|
|
243
|
+
*/
|
|
244
|
+
async filterReadableDocuments(documentIds, userAddress, getParentIds) {
|
|
245
|
+
const results = [];
|
|
246
|
+
for (const docId of documentIds) {
|
|
247
|
+
const canReadDoc = await this.canRead(docId, userAddress, getParentIds);
|
|
248
|
+
if (canReadDoc) {
|
|
249
|
+
results.push(docId);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
return results;
|
|
253
|
+
}
|
|
254
|
+
// ============================================
|
|
255
|
+
// Group Management
|
|
256
|
+
// ============================================
|
|
257
|
+
/**
|
|
258
|
+
* Create a new group
|
|
259
|
+
*/
|
|
260
|
+
async createGroup(name, description) {
|
|
261
|
+
const now = new Date();
|
|
262
|
+
await this.db
|
|
263
|
+
.insertInto("Group")
|
|
264
|
+
.values({
|
|
265
|
+
name,
|
|
266
|
+
description: description ?? null,
|
|
267
|
+
createdAt: now,
|
|
268
|
+
updatedAt: now,
|
|
269
|
+
})
|
|
270
|
+
.execute();
|
|
271
|
+
const result = await this.db
|
|
272
|
+
.selectFrom("Group")
|
|
273
|
+
.select(["id", "name", "description", "createdAt", "updatedAt"])
|
|
274
|
+
.where("name", "=", name)
|
|
275
|
+
.executeTakeFirstOrThrow();
|
|
276
|
+
return result;
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Delete a group and all its associations
|
|
280
|
+
*/
|
|
281
|
+
async deleteGroup(groupId) {
|
|
282
|
+
// Delete group permissions on operations
|
|
283
|
+
await this.db
|
|
284
|
+
.deleteFrom("OperationGroupPermission")
|
|
285
|
+
.where("groupId", "=", groupId)
|
|
286
|
+
.execute();
|
|
287
|
+
// Delete group document permissions
|
|
288
|
+
await this.db
|
|
289
|
+
.deleteFrom("DocumentGroupPermission")
|
|
290
|
+
.where("groupId", "=", groupId)
|
|
291
|
+
.execute();
|
|
292
|
+
// Delete user-group memberships
|
|
293
|
+
await this.db
|
|
294
|
+
.deleteFrom("UserGroup")
|
|
295
|
+
.where("groupId", "=", groupId)
|
|
296
|
+
.execute();
|
|
297
|
+
// Delete the group
|
|
298
|
+
await this.db.deleteFrom("Group").where("id", "=", groupId).execute();
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* Get a group by ID
|
|
302
|
+
*/
|
|
303
|
+
async getGroup(groupId) {
|
|
304
|
+
const result = await this.db
|
|
305
|
+
.selectFrom("Group")
|
|
306
|
+
.select(["id", "name", "description", "createdAt", "updatedAt"])
|
|
307
|
+
.where("id", "=", groupId)
|
|
308
|
+
.executeTakeFirst();
|
|
309
|
+
return result ?? null;
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
312
|
+
* List all groups
|
|
313
|
+
*/
|
|
314
|
+
async listGroups() {
|
|
315
|
+
return this.db
|
|
316
|
+
.selectFrom("Group")
|
|
317
|
+
.select(["id", "name", "description", "createdAt", "updatedAt"])
|
|
318
|
+
.execute();
|
|
319
|
+
}
|
|
320
|
+
/**
|
|
321
|
+
* Add a user to a group
|
|
322
|
+
*/
|
|
323
|
+
async addUserToGroup(userAddress, groupId) {
|
|
324
|
+
const now = new Date();
|
|
325
|
+
const normalizedAddress = userAddress.toLowerCase();
|
|
326
|
+
await this.db
|
|
327
|
+
.insertInto("UserGroup")
|
|
328
|
+
.values({
|
|
329
|
+
userAddress: normalizedAddress,
|
|
330
|
+
groupId,
|
|
331
|
+
createdAt: now,
|
|
332
|
+
})
|
|
333
|
+
.onConflict((oc) => oc.columns(["userAddress", "groupId"]).doNothing())
|
|
334
|
+
.execute();
|
|
335
|
+
}
|
|
336
|
+
/**
|
|
337
|
+
* Remove a user from a group
|
|
338
|
+
*/
|
|
339
|
+
async removeUserFromGroup(userAddress, groupId) {
|
|
340
|
+
await this.db
|
|
341
|
+
.deleteFrom("UserGroup")
|
|
342
|
+
.where("userAddress", "=", userAddress.toLowerCase())
|
|
343
|
+
.where("groupId", "=", groupId)
|
|
344
|
+
.execute();
|
|
345
|
+
}
|
|
346
|
+
/**
|
|
347
|
+
* Get all groups a user belongs to
|
|
348
|
+
*/
|
|
349
|
+
async getUserGroups(userAddress) {
|
|
350
|
+
return this.db
|
|
351
|
+
.selectFrom("UserGroup")
|
|
352
|
+
.innerJoin("Group", "Group.id", "UserGroup.groupId")
|
|
353
|
+
.select([
|
|
354
|
+
"Group.id",
|
|
355
|
+
"Group.name",
|
|
356
|
+
"Group.description",
|
|
357
|
+
"Group.createdAt",
|
|
358
|
+
"Group.updatedAt",
|
|
359
|
+
])
|
|
360
|
+
.where("UserGroup.userAddress", "=", userAddress.toLowerCase())
|
|
361
|
+
.execute();
|
|
362
|
+
}
|
|
363
|
+
/**
|
|
364
|
+
* Get all members of a group
|
|
365
|
+
*/
|
|
366
|
+
async getGroupMembers(groupId) {
|
|
367
|
+
const results = await this.db
|
|
368
|
+
.selectFrom("UserGroup")
|
|
369
|
+
.select("userAddress")
|
|
370
|
+
.where("groupId", "=", groupId)
|
|
371
|
+
.execute();
|
|
372
|
+
return results.map((r) => r.userAddress);
|
|
373
|
+
}
|
|
374
|
+
// ============================================
|
|
375
|
+
// Group Document Permissions
|
|
376
|
+
// ============================================
|
|
377
|
+
/**
|
|
378
|
+
* Grant a group permission on a document
|
|
379
|
+
*/
|
|
380
|
+
async grantGroupPermission(documentId, groupId, permission, grantedBy) {
|
|
381
|
+
const now = new Date();
|
|
382
|
+
await this.db
|
|
383
|
+
.insertInto("DocumentGroupPermission")
|
|
384
|
+
.values({
|
|
385
|
+
documentId,
|
|
386
|
+
groupId,
|
|
387
|
+
permission,
|
|
388
|
+
grantedBy: grantedBy.toLowerCase(),
|
|
389
|
+
createdAt: now,
|
|
390
|
+
updatedAt: now,
|
|
391
|
+
})
|
|
392
|
+
.onConflict((oc) => oc.columns(["documentId", "groupId"]).doUpdateSet({
|
|
393
|
+
permission,
|
|
394
|
+
grantedBy: grantedBy.toLowerCase(),
|
|
395
|
+
updatedAt: now,
|
|
396
|
+
}))
|
|
397
|
+
.execute();
|
|
398
|
+
const result = await this.db
|
|
399
|
+
.selectFrom("DocumentGroupPermission")
|
|
400
|
+
.select([
|
|
401
|
+
"documentId",
|
|
402
|
+
"groupId",
|
|
403
|
+
"permission",
|
|
404
|
+
"grantedBy",
|
|
405
|
+
"createdAt",
|
|
406
|
+
"updatedAt",
|
|
407
|
+
])
|
|
408
|
+
.where("documentId", "=", documentId)
|
|
409
|
+
.where("groupId", "=", groupId)
|
|
410
|
+
.executeTakeFirstOrThrow();
|
|
411
|
+
return result;
|
|
412
|
+
}
|
|
413
|
+
/**
|
|
414
|
+
* Revoke a group's permission on a document
|
|
415
|
+
*/
|
|
416
|
+
async revokeGroupPermission(documentId, groupId) {
|
|
417
|
+
await this.db
|
|
418
|
+
.deleteFrom("DocumentGroupPermission")
|
|
419
|
+
.where("documentId", "=", documentId)
|
|
420
|
+
.where("groupId", "=", groupId)
|
|
421
|
+
.execute();
|
|
422
|
+
}
|
|
423
|
+
/**
|
|
424
|
+
* Get all group permissions for a document
|
|
425
|
+
*/
|
|
426
|
+
async getDocumentGroupPermissions(documentId) {
|
|
427
|
+
return this.db
|
|
428
|
+
.selectFrom("DocumentGroupPermission")
|
|
429
|
+
.select([
|
|
430
|
+
"documentId",
|
|
431
|
+
"groupId",
|
|
432
|
+
"permission",
|
|
433
|
+
"grantedBy",
|
|
434
|
+
"createdAt",
|
|
435
|
+
"updatedAt",
|
|
436
|
+
])
|
|
437
|
+
.where("documentId", "=", documentId)
|
|
438
|
+
.execute();
|
|
439
|
+
}
|
|
440
|
+
/**
|
|
441
|
+
* Get best permission level a user has on a document via groups
|
|
442
|
+
*/
|
|
443
|
+
async getUserGroupPermission(documentId, userAddress) {
|
|
444
|
+
const result = await this.db
|
|
445
|
+
.selectFrom("DocumentGroupPermission")
|
|
446
|
+
.innerJoin("UserGroup", "UserGroup.groupId", "DocumentGroupPermission.groupId")
|
|
447
|
+
.select("DocumentGroupPermission.permission")
|
|
448
|
+
.where("DocumentGroupPermission.documentId", "=", documentId)
|
|
449
|
+
.where("UserGroup.userAddress", "=", userAddress.toLowerCase())
|
|
450
|
+
.execute();
|
|
451
|
+
if (result.length === 0) {
|
|
452
|
+
return null;
|
|
453
|
+
}
|
|
454
|
+
// Return highest permission level
|
|
455
|
+
if (result.some((r) => r.permission === "ADMIN"))
|
|
456
|
+
return "ADMIN";
|
|
457
|
+
if (result.some((r) => r.permission === "WRITE"))
|
|
458
|
+
return "WRITE";
|
|
459
|
+
return "READ";
|
|
460
|
+
}
|
|
461
|
+
// ============================================
|
|
462
|
+
// Operation Permissions
|
|
463
|
+
// ============================================
|
|
464
|
+
/**
|
|
465
|
+
* Grant a user permission to execute an operation on a document
|
|
466
|
+
*/
|
|
467
|
+
async grantOperationPermission(documentId, operationType, userAddress, grantedBy) {
|
|
468
|
+
const now = new Date();
|
|
469
|
+
const normalizedAddress = userAddress.toLowerCase();
|
|
470
|
+
await this.db
|
|
471
|
+
.insertInto("OperationUserPermission")
|
|
472
|
+
.values({
|
|
473
|
+
documentId,
|
|
474
|
+
operationType,
|
|
475
|
+
userAddress: normalizedAddress,
|
|
476
|
+
grantedBy: grantedBy.toLowerCase(),
|
|
477
|
+
createdAt: now,
|
|
478
|
+
})
|
|
479
|
+
.onConflict((oc) => oc.columns(["documentId", "operationType", "userAddress"]).doNothing())
|
|
480
|
+
.execute();
|
|
481
|
+
const result = await this.db
|
|
482
|
+
.selectFrom("OperationUserPermission")
|
|
483
|
+
.select([
|
|
484
|
+
"documentId",
|
|
485
|
+
"operationType",
|
|
486
|
+
"userAddress",
|
|
487
|
+
"grantedBy",
|
|
488
|
+
"createdAt",
|
|
489
|
+
])
|
|
490
|
+
.where("documentId", "=", documentId)
|
|
491
|
+
.where("operationType", "=", operationType)
|
|
492
|
+
.where("userAddress", "=", normalizedAddress)
|
|
493
|
+
.executeTakeFirstOrThrow();
|
|
494
|
+
return result;
|
|
495
|
+
}
|
|
496
|
+
/**
|
|
497
|
+
* Revoke a user's permission to execute an operation
|
|
498
|
+
*/
|
|
499
|
+
async revokeOperationPermission(documentId, operationType, userAddress) {
|
|
500
|
+
await this.db
|
|
501
|
+
.deleteFrom("OperationUserPermission")
|
|
502
|
+
.where("documentId", "=", documentId)
|
|
503
|
+
.where("operationType", "=", operationType)
|
|
504
|
+
.where("userAddress", "=", userAddress.toLowerCase())
|
|
505
|
+
.execute();
|
|
506
|
+
}
|
|
507
|
+
/**
|
|
508
|
+
* Grant a group permission to execute an operation on a document
|
|
509
|
+
*/
|
|
510
|
+
async grantGroupOperationPermission(documentId, operationType, groupId, grantedBy) {
|
|
511
|
+
const now = new Date();
|
|
512
|
+
await this.db
|
|
513
|
+
.insertInto("OperationGroupPermission")
|
|
514
|
+
.values({
|
|
515
|
+
documentId,
|
|
516
|
+
operationType,
|
|
517
|
+
groupId,
|
|
518
|
+
grantedBy: grantedBy.toLowerCase(),
|
|
519
|
+
createdAt: now,
|
|
520
|
+
})
|
|
521
|
+
.onConflict((oc) => oc.columns(["documentId", "operationType", "groupId"]).doNothing())
|
|
522
|
+
.execute();
|
|
523
|
+
const result = await this.db
|
|
524
|
+
.selectFrom("OperationGroupPermission")
|
|
525
|
+
.select([
|
|
526
|
+
"documentId",
|
|
527
|
+
"operationType",
|
|
528
|
+
"groupId",
|
|
529
|
+
"grantedBy",
|
|
530
|
+
"createdAt",
|
|
531
|
+
])
|
|
532
|
+
.where("documentId", "=", documentId)
|
|
533
|
+
.where("operationType", "=", operationType)
|
|
534
|
+
.where("groupId", "=", groupId)
|
|
535
|
+
.executeTakeFirstOrThrow();
|
|
536
|
+
return result;
|
|
537
|
+
}
|
|
538
|
+
/**
|
|
539
|
+
* Revoke a group's permission to execute an operation
|
|
540
|
+
*/
|
|
541
|
+
async revokeGroupOperationPermission(documentId, operationType, groupId) {
|
|
542
|
+
await this.db
|
|
543
|
+
.deleteFrom("OperationGroupPermission")
|
|
544
|
+
.where("documentId", "=", documentId)
|
|
545
|
+
.where("operationType", "=", operationType)
|
|
546
|
+
.where("groupId", "=", groupId)
|
|
547
|
+
.execute();
|
|
548
|
+
}
|
|
549
|
+
/**
|
|
550
|
+
* Get all users with permission to execute an operation
|
|
551
|
+
*/
|
|
552
|
+
async getOperationUserPermissions(documentId, operationType) {
|
|
553
|
+
return this.db
|
|
554
|
+
.selectFrom("OperationUserPermission")
|
|
555
|
+
.select([
|
|
556
|
+
"documentId",
|
|
557
|
+
"operationType",
|
|
558
|
+
"userAddress",
|
|
559
|
+
"grantedBy",
|
|
560
|
+
"createdAt",
|
|
561
|
+
])
|
|
562
|
+
.where("documentId", "=", documentId)
|
|
563
|
+
.where("operationType", "=", operationType)
|
|
564
|
+
.execute();
|
|
565
|
+
}
|
|
566
|
+
/**
|
|
567
|
+
* Get all groups with permission to execute an operation
|
|
568
|
+
*/
|
|
569
|
+
async getOperationGroupPermissions(documentId, operationType) {
|
|
570
|
+
return this.db
|
|
571
|
+
.selectFrom("OperationGroupPermission")
|
|
572
|
+
.select([
|
|
573
|
+
"documentId",
|
|
574
|
+
"operationType",
|
|
575
|
+
"groupId",
|
|
576
|
+
"grantedBy",
|
|
577
|
+
"createdAt",
|
|
578
|
+
])
|
|
579
|
+
.where("documentId", "=", documentId)
|
|
580
|
+
.where("operationType", "=", operationType)
|
|
581
|
+
.execute();
|
|
582
|
+
}
|
|
583
|
+
/**
|
|
584
|
+
* Check if a user can execute a specific operation on a document.
|
|
585
|
+
* Returns true if user has direct permission or is in a group with permission.
|
|
586
|
+
*/
|
|
587
|
+
async canExecuteOperation(documentId, operationType, userAddress) {
|
|
588
|
+
if (!userAddress) {
|
|
589
|
+
return false;
|
|
590
|
+
}
|
|
591
|
+
const normalizedAddress = userAddress.toLowerCase();
|
|
592
|
+
// Check direct user permission
|
|
593
|
+
const userPermission = await this.db
|
|
594
|
+
.selectFrom("OperationUserPermission")
|
|
595
|
+
.select("userAddress")
|
|
596
|
+
.where("documentId", "=", documentId)
|
|
597
|
+
.where("operationType", "=", operationType)
|
|
598
|
+
.where("userAddress", "=", normalizedAddress)
|
|
599
|
+
.executeTakeFirst();
|
|
600
|
+
if (userPermission) {
|
|
601
|
+
return true;
|
|
602
|
+
}
|
|
603
|
+
// Check group permission
|
|
604
|
+
const groupPermission = await this.db
|
|
605
|
+
.selectFrom("OperationGroupPermission")
|
|
606
|
+
.innerJoin("UserGroup", "UserGroup.groupId", "OperationGroupPermission.groupId")
|
|
607
|
+
.select("OperationGroupPermission.groupId")
|
|
608
|
+
.where("OperationGroupPermission.documentId", "=", documentId)
|
|
609
|
+
.where("OperationGroupPermission.operationType", "=", operationType)
|
|
610
|
+
.where("UserGroup.userAddress", "=", normalizedAddress)
|
|
611
|
+
.executeTakeFirst();
|
|
612
|
+
return !!groupPermission;
|
|
613
|
+
}
|
|
614
|
+
/**
|
|
615
|
+
* Check if an operation has any permissions set (is restricted)
|
|
616
|
+
*/
|
|
617
|
+
async isOperationRestricted(documentId, operationType) {
|
|
618
|
+
const userPermCount = await this.db
|
|
619
|
+
.selectFrom("OperationUserPermission")
|
|
620
|
+
.select(sql `count(*)`.as("count"))
|
|
621
|
+
.where("documentId", "=", documentId)
|
|
622
|
+
.where("operationType", "=", operationType)
|
|
623
|
+
.executeTakeFirst();
|
|
624
|
+
if (userPermCount && Number(userPermCount.count) > 0) {
|
|
625
|
+
return true;
|
|
626
|
+
}
|
|
627
|
+
const groupPermCount = await this.db
|
|
628
|
+
.selectFrom("OperationGroupPermission")
|
|
629
|
+
.select(sql `count(*)`.as("count"))
|
|
630
|
+
.where("documentId", "=", documentId)
|
|
631
|
+
.where("operationType", "=", operationType)
|
|
632
|
+
.executeTakeFirst();
|
|
633
|
+
return groupPermCount !== undefined && Number(groupPermCount.count) > 0;
|
|
634
|
+
}
|
|
635
|
+
}
|
|
636
|
+
//# sourceMappingURL=document-permission.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"document-permission.service.js","sourceRoot":"","sources":["../../../src/services/document-permission.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import type { GraphQLResolverMap, GraphQLSchemaModule } from "@apollo/subgraph/dist/schema-helper/resolverMap.js";
|
|
2
2
|
import type { Context } from "@powerhousedao/reactor-api";
|
|
3
3
|
import { type IDocumentDriveServer } from "document-drive";
|
|
4
|
-
import type {
|
|
5
|
-
import type
|
|
4
|
+
import type { DocumentModelGlobalState } from "document-model";
|
|
5
|
+
import { type DocumentNode } from "graphql";
|
|
6
6
|
export declare const buildSubgraphSchemaModule: (documentDriveServer: IDocumentDriveServer, resolvers: GraphQLResolverMap<Context>, typeDefs: DocumentNode) => GraphQLSchemaModule;
|
|
7
7
|
export declare const createSchema: (documentDriveServer: IDocumentDriveServer, resolvers: GraphQLResolverMap<Context>, typeDefs: DocumentNode) => import("graphql").GraphQLSchema;
|
|
8
|
-
export declare function getDocumentModelSchemaName(documentModel:
|
|
9
|
-
export declare const getDocumentModelTypeDefs: (documentDriveServer: IDocumentDriveServer, typeDefs: DocumentNode) => DocumentNode;
|
|
8
|
+
export declare function getDocumentModelSchemaName(documentModel: DocumentModelGlobalState): string;
|
|
9
|
+
export declare const getDocumentModelTypeDefs: (documentDriveServer: Pick<IDocumentDriveServer, "getDocumentModelModules">, typeDefs: DocumentNode) => DocumentNode;
|
|
10
|
+
export declare function generateDocumentModelSchemaLegacy(documentModel: DocumentModelGlobalState): DocumentNode;
|
|
10
11
|
//# sourceMappingURL=create-schema.d.ts.map
|