Skip to content

Commit bf3b579

Browse files
committed
Provide Neo4j currentUser "global" from SessionHost
1 parent 19b41ea commit bf3b579

File tree

2 files changed

+19
-4
lines changed

2 files changed

+19
-4
lines changed

src/core/database/database.service.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import {
1717
type UnwrapSecured,
1818
} from '~/common';
1919
import { AbortError, retry, type RetryOptions } from '~/common/retry';
20+
import { SessionHost } from '../../components/authentication/session.host';
2021
import { ConfigService } from '../config/config.service';
2122
import { ILogger, Logger } from '../logger';
2223
import { ShutdownHook } from '../shutdown.hook';
@@ -63,6 +64,7 @@ export class DatabaseService {
6364
constructor(
6465
private readonly db: Connection,
6566
private readonly config: ConfigService,
67+
private readonly sessionHost: SessionHost,
6668
private readonly shutdown$: ShutdownHook,
6769
@Logger('database:service') private readonly logger: ILogger,
6870
) {}
@@ -122,6 +124,7 @@ export class DatabaseService {
122124
parameters?: Record<string, any>,
123125
): Query<Result> {
124126
const q = this.db.query() as Query<Result>;
127+
q.params.addParam(this.sessionHost.current$.value?.userId, 'currentUser');
125128
if (query) {
126129
q.raw(query, parameters);
127130
}

src/core/database/query/matching.ts

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
1-
import { node, type Query, relation } from 'cypher-query-builder';
1+
import {
2+
node,
3+
type NodePattern,
4+
type Query,
5+
relation,
6+
} from 'cypher-query-builder';
27
import { uniq } from 'lodash';
38
import { DateTime } from 'luxon';
9+
import { type Tagged } from 'type-fest';
410
import {
511
type ID,
612
isIdLike,
@@ -13,11 +19,17 @@ import {
1319
import { variable } from '../query-augmentation/condition-variables';
1420
import { apoc, collect, listConcat, merge } from './cypher-functions';
1521

16-
export const requestingUser = (session: Session | ID) => {
22+
export const currentUser = node('currentUser', 'User', {
23+
id: variable('$currentUser'),
24+
}) as Tagged<NodePattern, 'CurrentUser'>;
25+
26+
export const requestingUser = (session?: Session | ID) => {
1727
const n = node('requestingUser', 'User', {
18-
id: variable('$requestingUser'),
28+
id: variable(session ? '$requestingUser' : '$currentUser'),
1929
});
20-
n.addParam(isIdLike(session) ? session : session.userId, 'requestingUser');
30+
if (session) {
31+
n.addParam(isIdLike(session) ? session : session.userId, 'requestingUser');
32+
}
2133
return n;
2234
};
2335

0 commit comments

Comments
 (0)