Allow guest to update its identities

Signed-off-by: Alexey Zinoviev <alexey.zinoviev@xored.com>
This commit is contained in:
Alexey Zinoviev
2025-10-31 03:35:30 +04:00
parent cdb1285844
commit b3df6fa3f6
18 changed files with 89 additions and 65 deletions
+42 -42
View File
@@ -22,8 +22,8 @@ importers:
specifier: ^0.7.17
version: 0.7.17
'@hcengineering/core':
specifier: ^0.7.19
version: 0.7.19
specifier: ^0.7.21
version: 0.7.21
'@hcengineering/platform':
specifier: ^0.7.17
version: 0.7.17
@@ -92,8 +92,8 @@ importers:
../../packages/collaboration:
dependencies:
'@hcengineering/core':
specifier: ^0.7.19
version: 0.7.19
specifier: ^0.7.21
version: 0.7.21
'@hcengineering/server-core':
specifier: workspace:^0.7.16
version: link:../core
@@ -162,8 +162,8 @@ importers:
specifier: ^0.7.17
version: 0.7.17
'@hcengineering/core':
specifier: ^0.7.19
version: 0.7.19
specifier: ^0.7.21
version: 0.7.21
'@hcengineering/platform':
specifier: ^0.7.17
version: 0.7.17
@@ -238,8 +238,8 @@ importers:
../../packages/datalake:
dependencies:
'@hcengineering/core':
specifier: ^0.7.19
version: 0.7.19
specifier: ^0.7.21
version: 0.7.21
'@hcengineering/platform':
specifier: ^0.7.17
version: 0.7.17
@@ -308,8 +308,8 @@ importers:
specifier: ^0.7.17
version: 0.7.17
'@hcengineering/core':
specifier: ^0.7.19
version: 0.7.19
specifier: ^0.7.21
version: 0.7.21
'@hcengineering/platform':
specifier: ^0.7.17
version: 0.7.17
@@ -366,8 +366,8 @@ importers:
../../packages/hulylake:
dependencies:
'@hcengineering/core':
specifier: ^0.7.19
version: 0.7.19
specifier: ^0.7.21
version: 0.7.21
'@hcengineering/hulylake-client':
specifier: ^0.7.17
version: 0.7.17
@@ -433,8 +433,8 @@ importers:
../../packages/kafka:
dependencies:
'@hcengineering/core':
specifier: ^0.7.19
version: 0.7.19
specifier: ^0.7.21
version: 0.7.21
'@hcengineering/platform':
specifier: ^0.7.17
version: 0.7.17
@@ -500,8 +500,8 @@ importers:
specifier: ^0.7.17
version: 0.7.17
'@hcengineering/core':
specifier: ^0.7.19
version: 0.7.19
specifier: ^0.7.21
version: 0.7.21
'@hcengineering/platform':
specifier: ^0.7.17
version: 0.7.17
@@ -564,8 +564,8 @@ importers:
../../packages/minio:
dependencies:
'@hcengineering/core':
specifier: ^0.7.19
version: 0.7.19
specifier: ^0.7.21
version: 0.7.21
'@hcengineering/platform':
specifier: ^0.7.17
version: 0.7.17
@@ -625,8 +625,8 @@ importers:
../../packages/mongo:
dependencies:
'@hcengineering/core':
specifier: ^0.7.19
version: 0.7.19
specifier: ^0.7.21
version: 0.7.21
'@hcengineering/platform':
specifier: ^0.7.17
version: 0.7.17
@@ -689,8 +689,8 @@ importers:
../../packages/postgres:
dependencies:
'@hcengineering/core':
specifier: ^0.7.19
version: 0.7.19
specifier: ^0.7.21
version: 0.7.21
'@hcengineering/platform':
specifier: ^0.7.17
version: 0.7.17
@@ -762,8 +762,8 @@ importers:
specifier: ^3.738.0
version: 3.917.0
'@hcengineering/core':
specifier: ^0.7.19
version: 0.7.19
specifier: ^0.7.21
version: 0.7.21
'@hcengineering/platform':
specifier: ^0.7.17
version: 0.7.17
@@ -832,8 +832,8 @@ importers:
specifier: ^0.7.17
version: 0.7.17
'@hcengineering/core':
specifier: ^0.7.19
version: 0.7.19
specifier: ^0.7.21
version: 0.7.21
'@hcengineering/platform':
specifier: ^0.7.17
version: 0.7.17
@@ -905,8 +905,8 @@ importers:
specifier: ^0.7.17
version: 0.7.17
'@hcengineering/core':
specifier: ^0.7.19
version: 0.7.19
specifier: ^0.7.21
version: 0.7.21
'@hcengineering/datalake':
specifier: workspace:^0.7.15
version: link:../datalake
@@ -1575,8 +1575,8 @@ packages:
'@hcengineering/client@0.7.17':
resolution: {integrity: sha512-3SjW0e/pPa/qQNqpGuh6A+Y5XN0WQ2EMgUZaXjY2Xmchpna7Xp6hYDvzSL4yPA4tZSGE8n0gu7FK8LRamMdrUg==}
'@hcengineering/core@0.7.19':
resolution: {integrity: sha512-BMkVkVXMU8qmbR2KAeMZ3YIMfa07/AzdCEY7PNn7dfAZyc63vrLz+Jl0CPvN7cq9p6x/WBkMfS+eKFwtvhZIUA==}
'@hcengineering/core@0.7.21':
resolution: {integrity: sha512-iZejKdlMgBTiTZnOG83uGBx0QtpY1y1gEjzcoSNirSeBW5urATOtbrqIgFH9eltMk3kJBYLV2sVW0fI/AMf8Wg==}
'@hcengineering/hulylake-client@0.7.17':
resolution: {integrity: sha512-TPqdc5nd7xV73Y1B2EJ7GxpWazp9ACV1AqHlm6ebYwU1CzXQvbuJxF68itbHmPiNiCmmuiDruJmjnyLGwL18Kw==}
@@ -5436,7 +5436,7 @@ snapshots:
'@hcengineering/account-client@0.7.18':
dependencies:
'@hcengineering/core': 0.7.19
'@hcengineering/core': 0.7.21
'@hcengineering/platform': 0.7.17
'@hcengineering/analytics@0.7.17':
@@ -5447,17 +5447,17 @@ snapshots:
dependencies:
'@hcengineering/analytics': 0.7.17
'@hcengineering/client': 0.7.17
'@hcengineering/core': 0.7.19
'@hcengineering/core': 0.7.21
'@hcengineering/platform': 0.7.17
'@hcengineering/rpc': 0.7.17
snappyjs: 0.7.0
'@hcengineering/client@0.7.17':
dependencies:
'@hcengineering/core': 0.7.19
'@hcengineering/core': 0.7.21
'@hcengineering/platform': 0.7.17
'@hcengineering/core@0.7.19':
'@hcengineering/core@0.7.21':
dependencies:
'@hcengineering/analytics': 0.7.17
'@hcengineering/measurements': 0.7.18
@@ -5466,7 +5466,7 @@ snapshots:
'@hcengineering/hulylake-client@0.7.17':
dependencies:
'@hcengineering/core': 0.7.19
'@hcengineering/core': 0.7.21
'@hcengineering/retry': 0.7.17
'@hcengineering/measurements@0.7.18': {}
@@ -5515,7 +5515,7 @@ snapshots:
'@hcengineering/query@0.7.17':
dependencies:
'@hcengineering/analytics': 0.7.17
'@hcengineering/core': 0.7.19
'@hcengineering/core': 0.7.21
'@hcengineering/platform': 0.7.17
fast-equals: 5.3.2
@@ -5523,32 +5523,32 @@ snapshots:
'@hcengineering/rpc@0.7.17':
dependencies:
'@hcengineering/core': 0.7.19
'@hcengineering/core': 0.7.21
'@hcengineering/platform': 0.7.17
msgpackr: 1.11.5
'@hcengineering/server-token@0.7.17':
dependencies:
'@hcengineering/core': 0.7.19
'@hcengineering/core': 0.7.21
'@hcengineering/platform': 0.7.17
jwt-simple: 0.5.6
uuid: 8.3.2
'@hcengineering/storage@0.7.17':
dependencies:
'@hcengineering/core': 0.7.19
'@hcengineering/core': 0.7.21
'@hcengineering/platform': 0.7.17
fast-equals: 5.3.2
'@hcengineering/text-core@0.7.18':
dependencies:
'@hcengineering/core': 0.7.19
'@hcengineering/core': 0.7.21
fast-equals: 5.3.2
hash-it: 6.0.0
'@hcengineering/text-ydoc@0.7.18(prosemirror-inputrules@1.5.1)(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.3)':
dependencies:
'@hcengineering/core': 0.7.19
'@hcengineering/core': 0.7.21
'@hcengineering/text': 0.7.18(prosemirror-inputrules@1.5.1)(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.3)
'@hcengineering/text-core': 0.7.18
y-protocols: 1.0.6(yjs@13.6.27)
@@ -5561,7 +5561,7 @@ snapshots:
'@hcengineering/text@0.7.18(prosemirror-inputrules@1.5.1)(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.3)':
dependencies:
'@hcengineering/core': 0.7.19
'@hcengineering/core': 0.7.21
'@hcengineering/text-core': 0.7.18
'@tiptap/core': 2.26.4(@tiptap/pm@2.26.4)
'@tiptap/extension-blockquote': 2.26.4(@tiptap/core@2.26.4(@tiptap/pm@2.26.4))
+1 -1
View File
@@ -38,7 +38,7 @@
},
"dependencies": {
"@hcengineering/platform": "^0.7.17",
"@hcengineering/core": "^0.7.19",
"@hcengineering/core": "^0.7.21",
"@hcengineering/client-resources": "^0.7.17",
"@hcengineering/client": "^0.7.17",
"@hcengineering/account-client": "^0.7.18",
+1 -1
View File
@@ -35,7 +35,7 @@
"eslint-plugin-svelte": "^2.35.1"
},
"dependencies": {
"@hcengineering/core": "^0.7.19",
"@hcengineering/core": "^0.7.21",
"@hcengineering/server-core": "workspace:^0.7.16",
"@hcengineering/text": "^0.7.18",
"@hcengineering/text-ydoc": "^0.7.18",
+1 -1
View File
@@ -37,7 +37,7 @@
},
"dependencies": {
"@hcengineering/analytics": "^0.7.17",
"@hcengineering/core": "^0.7.19",
"@hcengineering/core": "^0.7.21",
"@hcengineering/platform": "^0.7.17",
"@hcengineering/query": "^0.7.17",
"@hcengineering/rpc": "^0.7.17",
+1 -1
View File
@@ -36,7 +36,7 @@
"eslint-plugin-svelte": "^2.35.1"
},
"dependencies": {
"@hcengineering/core": "^0.7.19",
"@hcengineering/core": "^0.7.21",
"@hcengineering/platform": "^0.7.17",
"@hcengineering/server-core": "workspace:^0.7.16",
"@hcengineering/server-token": "^0.7.17"
+1 -1
View File
@@ -55,7 +55,7 @@
"eslint-plugin-svelte": "^2.35.1"
},
"dependencies": {
"@hcengineering/core": "^0.7.19",
"@hcengineering/core": "^0.7.21",
"@hcengineering/platform": "^0.7.17",
"@hcengineering/server-core": "workspace:^0.7.16",
"@elastic/elasticsearch": "^7.17.14",
+1 -1
View File
@@ -36,7 +36,7 @@
"eslint-plugin-svelte": "^2.35.1"
},
"dependencies": {
"@hcengineering/core": "^0.7.19",
"@hcengineering/core": "^0.7.21",
"@hcengineering/platform": "^0.7.17",
"@hcengineering/server-core": "workspace:^0.7.16",
"@hcengineering/server-token": "^0.7.17",
+1 -1
View File
@@ -35,7 +35,7 @@
"eslint-plugin-svelte": "^2.35.1"
},
"dependencies": {
"@hcengineering/core": "^0.7.19",
"@hcengineering/core": "^0.7.21",
"@hcengineering/platform": "^0.7.17",
"@hcengineering/server-core": "workspace:^0.7.16",
"@hcengineering/storage": "^0.7.17",
+12
View File
@@ -1,6 +1,18 @@
{
"name": "@hcengineering/middleware",
"entries": [
{
"version": "0.7.17",
"tag": "@hcengineering/middleware_v0.7.17",
"date": "Thu, 30 Oct 2025 23:32:01 GMT",
"comments": {
"patch": [
{
"comment": "allow guests to update their identities"
}
]
}
},
{
"version": "0.7.16",
"tag": "@hcengineering/middleware_v0.7.16",
+8 -1
View File
@@ -1,6 +1,13 @@
# Change Log - @hcengineering/middleware
This log was last generated on Thu, 30 Oct 2025 20:53:38 GMT and should not be manually modified.
This log was last generated on Thu, 30 Oct 2025 23:32:01 GMT and should not be manually modified.
## 0.7.17
Thu, 30 Oct 2025 23:32:01 GMT
### Patches
- allow guests to update their identities
## 0.7.16
Thu, 30 Oct 2025 20:53:38 GMT
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "@hcengineering/middleware",
"version": "0.7.16",
"version": "0.7.17",
"main": "lib/index.js",
"svelte": "src/index.ts",
"types": "types/index.d.ts",
@@ -35,7 +35,7 @@
"eslint-plugin-svelte": "^2.35.1"
},
"dependencies": {
"@hcengineering/core": "^0.7.19",
"@hcengineering/core": "^0.7.21",
"@hcengineering/platform": "^0.7.17",
"@hcengineering/server-core": "workspace:^0.7.16",
"@hcengineering/query": "^0.7.17",
+12 -7
View File
@@ -9,6 +9,7 @@ import core, {
type Doc,
hasAccountRole,
type MeasureContext,
type PersonId,
type SessionData,
type Space,
type Tx,
@@ -55,27 +56,28 @@ export class GuestPermissionsMiddleware extends BaseMiddleware implements Middle
return
}
if (TxProcessor.isExtendsCUD(tx._class)) {
const socialIds = ctx.contextData.account.socialIds
const cudTx = tx as TxCUD<Doc>
const isSpace = h.isDerived(cudTx.objectClass, core.class.Space)
if (isSpace) {
if (this.isForbiddenSpaceTx(cudTx as TxCUD<Space>)) {
if (this.isForbiddenSpaceTx(cudTx as TxCUD<Space>, socialIds)) {
throw new PlatformError(new Status(Severity.ERROR, platform.status.Forbidden, {}))
}
} else if (cudTx.space !== core.space.DerivedTx && this.isForbiddenTx(cudTx)) {
} else if (cudTx.space !== core.space.DerivedTx && this.isForbiddenTx(cudTx, socialIds)) {
throw new PlatformError(new Status(Severity.ERROR, platform.status.Forbidden, {}))
}
}
}
private isForbiddenTx (tx: TxCUD<Doc>): boolean {
private isForbiddenTx (tx: TxCUD<Doc>, socialIds: PersonId[]): boolean {
if (tx._class === core.class.TxMixin) return false
return !this.hasMixinAccessLevel(tx)
return !this.hasMixinAccessLevel(tx, socialIds)
}
private isForbiddenSpaceTx (tx: TxCUD<Space>): boolean {
private isForbiddenSpaceTx (tx: TxCUD<Space>, socialIds: PersonId[]): boolean {
if (tx._class === core.class.TxRemoveDoc) return true
if (tx._class === core.class.TxCreateDoc) {
return !this.hasMixinAccessLevel(tx)
return !this.hasMixinAccessLevel(tx, socialIds)
}
if (tx._class === core.class.TxUpdateDoc) {
const updateTx = tx as TxUpdateDoc<Space>
@@ -91,7 +93,7 @@ export class GuestPermissionsMiddleware extends BaseMiddleware implements Middle
return false
}
private hasMixinAccessLevel (tx: TxCUD<Doc>): boolean {
private hasMixinAccessLevel (tx: TxCUD<Doc>, socialIds: PersonId[]): boolean {
const h = this.context.hierarchy
const accessLevelMixin = h.classHierarchyMixin(tx.objectClass, core.mixin.TxAccessLevel)
if (accessLevelMixin === undefined) return false
@@ -102,6 +104,9 @@ export class GuestPermissionsMiddleware extends BaseMiddleware implements Middle
return accessLevelMixin.removeAccessLevel === AccountRole.Guest
}
if (tx._class === core.class.TxUpdateDoc) {
if (accessLevelMixin.isIdentity === true && socialIds.includes(tx.objectId as unknown as PersonId)) {
return true
}
return accessLevelMixin.updateAccessLevel === AccountRole.Guest
}
return false
+1 -1
View File
@@ -35,7 +35,7 @@
"eslint-plugin-svelte": "^2.35.1"
},
"dependencies": {
"@hcengineering/core": "^0.7.19",
"@hcengineering/core": "^0.7.21",
"@hcengineering/platform": "^0.7.17",
"@hcengineering/server-core": "workspace:^0.7.16",
"minio": "^8.0.5"
+1 -1
View File
@@ -35,7 +35,7 @@
"eslint-plugin-svelte": "^2.35.1"
},
"dependencies": {
"@hcengineering/core": "^0.7.19",
"@hcengineering/core": "^0.7.21",
"@hcengineering/platform": "^0.7.17",
"@hcengineering/server-core": "workspace:^0.7.16",
"mongodb": "^6.16.0",
+1 -1
View File
@@ -36,7 +36,7 @@
},
"dependencies": {
"postgres": "^3.4.7",
"@hcengineering/core": "^0.7.19",
"@hcengineering/core": "^0.7.21",
"@hcengineering/platform": "^0.7.17",
"@hcengineering/server-core": "workspace:^0.7.16",
"@hcengineering/postgres-base": "^0.7.17"
+1 -1
View File
@@ -35,7 +35,7 @@
"eslint-plugin-svelte": "^2.35.1"
},
"dependencies": {
"@hcengineering/core": "^0.7.19",
"@hcengineering/core": "^0.7.21",
"@hcengineering/platform": "^0.7.17",
"@hcengineering/server-core": "workspace:^0.7.16",
"@hcengineering/storage": "^0.7.17",
+1 -1
View File
@@ -56,7 +56,7 @@
"eslint-plugin-svelte": "^2.35.1"
},
"dependencies": {
"@hcengineering/core": "^0.7.19",
"@hcengineering/core": "^0.7.21",
"@hcengineering/platform": "^0.7.17",
"@hcengineering/server-core": "workspace:^0.7.16",
"@hcengineering/minio": "workspace:^0.7.15",
+1 -1
View File
@@ -38,7 +38,7 @@
"dependencies": {
"@hcengineering/account-client": "^0.7.18",
"@hcengineering/analytics": "^0.7.17",
"@hcengineering/core": "^0.7.19",
"@hcengineering/core": "^0.7.21",
"@hcengineering/platform": "^0.7.17",
"@hcengineering/rpc": "^0.7.17",
"@hcengineering/server-core": "workspace:^0.7.16",